我是新來調試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