我正在尝试将对象传递给函数,以根据其中包含的值绘制图形。但是,当我将对象传递给函数时,javascript会将其读取为对象和未定义对象:
$(plot({pv : '1000', d : '20', n : '10'}));
highcharts.js:45 {pv: "1000", d: "20", n: "10"}
highcharts.js:47 object
highcharts.js:45 undefined
highcharts.js:47 undefined
然后,当我尝试访问data['pv']
或data.pv
时,我得到:
TypeError: Cannot read property 'pv' of undefined
at calculate (highcharts.js:55)
但是如果访问全局变量,它将运行平稳:
var obj = {pv : '1000', d : '20', n : '10'};
目前,我将脚趾浸入Javascript中,所以我确定对于该语言我尚不了解。任何帮助,将不胜感激。
这是我的其他丑陋代码供参考:
$(function () {
$(plot({pv : '1000', d : '20', n : '10'}));
});
// Global variables
var pv = 0;
var r = 0.015;
var n = 0;
var d = 0;
var x = new Array();
var y = new Array();
var v = new Array();
var before = new Array();
var obj = {pv : '1000', d : '20', n : '10'};
// Plot button
function plot(data) {
// if (isValid()) {
console.log(data);
calculateBefore(data);
calculate(data);
plotValues();
// }
};
function calculate(data) {
console.log(data);
// pv = Number($('#pv').val());
console.log(typeof(data));
// obj = data['pv'];
console.log(obj);
pv = Number(data['pv']); // Error appears on this line
// r = Number($('#r').val()) / 100;
r = 0.015;
// d = Number($('#d').val());
d = Number(data['d']);
var xmin = 0;
// var xmax = Number($('#n').val()) * 4;
var xmax = Number(data['n']) * 4;
var i = 0;
v = [];
for (xt = xmin; xt <= xmax; xt++) {
x[i] = xt;
y[i] = calculateY(pv, r, xt);
v[i] = [x[i], y[i]];
i++;
}
n = i - 1;
}
似乎问题在于数据本身是未定义的,因此,如果尝试console.log(data)
,则会得到未定义的信息。函数中引用的数据是一个参数,因此您不能在函数范围之外访问它。
顺便说一句,您应该尽量避免使用全局变量和一般的var
。您可以将const
用于不会更改的变量,并将let
用于您希望更改的变量。
希望这会有所帮助!