這種錯誤已經我已經屢次犯了,一次用Ext作abcc的demo,一次是abcc查詢模塊。數組
js報錯分爲兩種:語法錯誤和運行錯誤瀏覽器
一、js引擎在代碼載入時進行語法分析,若是js寫的不規範則語法分析通不過。這時候的錯誤稱爲語法錯誤ide
二、語法分析經過了,js引擎會執行代碼。執行期間發生的錯誤稱爲運行錯誤測試
不一樣引擎處理這2種錯誤的提示不太同樣。以下:this
var p = {name:"Jack",age:33,};//注意33後有個逗號 p.toString = function() {return "姓名:" +this.name + ",年齡:" + this.age}; console.log(p); alert(p);//姓名:Jack,年齡33
firefox下測試,引擎會忽略33後的逗號,能夠經過語法檢查,在執行期也不會報錯spa
IE6/7下測試,語法分析期就報錯了,固然也不會進入執行期了。firefox
不過在IE8下已經修復此問題,不會報錯了。其它瀏覽器也不會報錯。code
總結下:此錯誤很難發現,常常是不當心就加了個逗號,或者定義了一個不少屬性的對象或數組後來又要刪除其中的某些而不當心留下了多餘的逗號。orm
//不規範的寫法 var p = {name:"Jack",age:33,}; var ary = ["one","two","three",]; //規範的寫法 var p = {name:"Jack",age:33}; var ary = ["one","two","three"];
此外,定義數組直接量時也可能碰到這個問題,如數組最後多了個逗號 對象
var ary = [1,2,];E6/7/8 輸出length爲3,IE9及其它瀏覽器爲2。ECMAScript 5 11.1.4 其中有段說明了應該忽略最後的逗號。但直到IE9才實現該規範。其它瀏覽器則沒問題。
console.log(ary.length);
ECMAScript 5 11.1.4 寫道
Array elements may be elided at the beginning, middle or end of the element list. Whenever a comma in the element list is not preceded by an AssignmentExpression (i.e., a comma at the beginning or after another comma), the missing array element contributes to the length of the Array and increases the index of subsequent elements. Elided array elements are not defined. If an element is elided at the end of an array, that element does not contribute to the length of the Array.