我是调试js的新手。这是我和js一起玩的第一周,我通过D3.js学习它。我有几年'蟒蛇的娱乐体验。
我在这里将值d
传递给了anon函数。想象一下d == [55, 601]
。
circles.attr({
cx: function(d) { return xScale(d[0]) },
cy: function(d) { return yScale(d[1]) },
r: function(d) { return rScale( d[1] ) },
fill: function(d) { return colorScale(d) } <<<< Attention here.
});
Javascript没有返回任何错误。圆圈使用正确的cx
和cy
以及r
值进行渲染,但使用fill="#NaNNaNNaN"
。然而,chrome调试工具给了我:
> colorScale(500)
< "#7d0082"
当我在python中执行此操作时,我得到:
TypeError: input expected at most 1 arguments, got 2
回到js,经过1.5小时的调试后,我发现将parseInt(d)
传递给该函数是有效的。但那不是答案。这就是答案:
fill: function(d) { return colorScale(d[0]) } <<<< Fixed.
我的问题:
答案 0 :(得分:2)
代码运行并没有给我一个错误。这种行为是来自javascript,D3还是铬网络工具?
它是javascript(实际上是ECMAScript,它是底层编程语言)。
这种错误会在任何地方引发错误消息吗?
这取决于。例如,如果函数需要一个数组但是得到一个原语并尝试使用数组方法,那么你就会得到一个错误,例如。
// @param {Array} arr
// @returns arr
function foo(arr) {
arr.push('bar');
return arr;
}
// Call with an array
document.write(foo([])) // bar
// Call with a primitive instead
document.write('<br>' + foo(6)) // In console: Uncaught TypeError: arr.push is not a function
&#13;
但是如果你只是试图访问一个命名属性,没有。由于ECMAScript有助于将值强制转换为适合该操作的类型,因此在:
var x = 3;
alert(x.length); // undefined
原始值会立即强制转换为对象以获取其 length 属性。由于它没有,因此返回 undefined 。尝试:
alert(x.toString); // function() { [native code] }
&#34;工作&#34;因为Numbers具有从 Number.prototype 继承的 toString 方法。