我細讀underscore.js annotated source當我遇到這樣的:什麼時候obj.length不等於+ obj.length?
if (obj.length === +obj.length) {...}
我現在從this stackoverflow question的加號(+)運算符返回對象的數字表示知道了。
也就是說,obj.length返回一個數字。 obj.length
何時會不等於+obj.length
?
我細讀underscore.js annotated source當我遇到這樣的:什麼時候obj.length不等於+ obj.length?
if (obj.length === +obj.length) {...}
我現在從this stackoverflow question的加號(+)運算符返回對象的數字表示知道了。
也就是說,obj.length返回一個數字。 obj.length
何時會不等於+obj.length
?
時,例如:
var obj = {
0: 'first',
length: '1'
};
alert(obj.length === +obj.length);
下劃線的each
是一個通用的,因此可以用比其他array
其他對象。就像ECMA5 forEach
forEach函數是有意通用的;它不要求它的這個值是一個Array對象。因此可以將其轉換爲其他類型的對象以用作方法。 forEach函數是否可以成功應用於主機對象取決於實現。
因此下劃線正在檢查對象的length
屬性的有效性。並且他們認爲該對象的迭代方法arrayLike
僅在對象的length
返回的number
不是NaN
,而且當然不是string
。因此,在我上面的示例中,如果沒有本地/多填充forEach
,obj
將落入其迭代keys
。
它確保長度保存一個實際的數字而不是一個代表數字的字符串..(*因爲它使用'==='來檢查類型*)。通過這種方式,它可以增強對傳遞給它的具有「長度」屬性的隨機對象的保護。 –