2015-10-05 30 views
7

MDN爲什麼ES6定義map.length == 0?

Map.length

length屬性的值是0

有什麼用例呢?我明白爲什麼Map.size在語義上是正確的。但是,幾乎總是返回「錯誤」答案的Map.length肯定是個不錯的主意,尤其是如果存在從ES5遷移代碼的疏忽。使用這種方法時是否有強制錯誤的方法?

+0

[這裏也是規範的相關部分](http://www.ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-constructor) –

+6

它說' Map.length'是'0'。並不是說新的Map()的'.length'屬性是'0'。嘗試:'var m = new Map(); console.log(m.length,m.size,Map.length);'。 –

+1

儘管如此,仍然不解釋*爲什麼*'Map.length === 0'。 –

回答

15

JavaScript中的構造函數是常規函數,函數的length屬性對應於函數期望的形式參數的數量,在Map的情況下爲0。

將此與RegExp.length對比,因爲RegExp構造函數需要兩個參數(模式和標誌)。

+0

雖然這並不完全一致,因爲'RegExp'的flags參數是可選的,'Map'可迭代'',所以'Map.length'應該是1的邏輯? –

+3

@JamesThorpe實際上,原生函數 - 與用戶定義的函數不同 - 甚至沒有正式的定義,所以'length'屬性只是由ECMAScript標準指定的,而且這個規範肯定會考慮到實際使用中的兼容性問題關注。然而,_spirit_是一樣的。 –

+0

@JamesThorpe FWIW:規範將其描述爲_「函數期望的參數的典型數量」_ – zeroflagL