我是新来调试js。这是我第一周和js一起玩,我正在通过D3.js学习它。我有几年的蟒蛇娱乐体验。有没有正确的方法来发现js中的非致命错误?
我在这里通过了一项价值d
来不久又功能。想象一下,例如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"
呈现。然而,铬调试工具递给我:
> colorScale(500)
< "#7d0082"
当我这样做是蟒蛇,我得到:
TypeError: input expected at most 1 arguments, got 2
回JS,1.5的调试时间后,我发现,通过parseInt(d)
的功能工作。但那不是答案。这就是答案:
fill: function(d) { return colorScale(d[0]) } <<<< Fixed.
我的问题:
- 的代码运行,并没有给我一个错误。这种行为是来自JavaScript,D3还是铬网络工具?
- 请问这种错误的任何地方产生错误消息?
欢迎使用JavaScript!这个错误很典型。不管声明如何,JavaScript函数都可以用任意数量的参数调用。 – Pointy
@Pointy更不用说任何类型。尽管JS通常会尽职地试图强制将所通过的论点强制为必要的类型。 (取决于函数中发生了什么) –
另外,因为参数没有类型(虽然值是这样),所以你不能指定* d *必须是数组,所以调试器不能指出数组是预计在不通过时不会抛出。但**你**可以检查是否需要(例如使用[* Array.isArray *](http://www.ecma-international.org/ecma-262/6.0/#sec-array.isarray))。但是类型检查是令人疲惫的,所以大多数程序都是围绕它进行编程的(例如传递单独的原始值,而不是数组值)。 – RobG