dor*_*emi 6 javascript underscore.js
当我遇到这个时,我正在仔细阅读underscore.js注释源:
if (obj.length === +obj.length) {...}
Run Code Online (Sandbox Code Playgroud)
我现在从这个stackoverflow问题知道加号(+)运算符返回对象的数字表示.
也就是说,obj.length返回一个数字.什么时候obj.length不等于+obj.length?
该===运营商不作任何类型转换时,它会检查,所以不同类型的数据会立即返回false就算'5' == 5.在+如你所说的类型转换对象成数.如果你将一个数字类型化为一个数字,它仍然是一个数字,所以你基本上检查你的object.length存在是否是一个数字.像价值观undefined,NaN,null,string和其他人将返回false.你不确定obj会发生什么,所以你必须检查......
当,例如:
var obj = {
0: 'first',
length: '1'
};
alert(obj.length === +obj.length);
Run Code Online (Sandbox Code Playgroud)
Underscoreeach是通用的,因此可以与array. 就像ECMA5一样forEach
forEach 函数故意是通用的;它不要求其 this 值是一个 Array 对象。因此它可以转移到其他类型的对象以用作方法。forEach 函数是否可以成功应用于宿主对象取决于实现。
所以下划线正在检查对象length属性的有效性。arrayLike对于该迭代方法,只有当该对象length返回的 anumber不是NaN且肯定不是 a 时,他们才认为是一个对象string。所以在我上面的例子中,如果没有 native/polyfilled ,obj就会陷入迭代。keysforEach
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |