125*_*748 7 javascript underscore.js
使用点表示法向数组添加属性是否将其更改为对象?
var arr = [];
arr.something = "test";
Run Code Online (Sandbox Code Playgroud)
它是一个数组吗?
我不这么认为,但是下划线.js说是的
console.log( _.isArray(arr) ); //true
Run Code Online (Sandbox Code Playgroud)
如果查看underscore.js 源代码,您会看到该isArray函数定义为:
_.isArray = nativeIsArray || function(obj) {
return toString.call(obj) == '[object Array]';
};
Run Code Online (Sandbox Code Playgroud)
浏览者的本地人Array.isArray说它是一个数组,因为它是被实例化的.如果浏览器没有本机isArray,则underscore.js使用第二个选项:比较toString对象以查看它是否与字符串匹配[object Array].
简单地添加属性不足以改变对象的类型(根据JavaScript虚拟机,它仍然是恰好是数组的对象).JavaScript是一种动态语言,这意味着您可以向内置对象添加属性,但这样做并不会改变它们的内容; 你只是扩展了他们.例如,Prototype.js用于通过向它们添加额外属性来扩展本机对象(如迭代器,过滤器,映射函数等).
您可以非常轻松地在Chrome中查看行为:
> var arr = [];
arr.something = "test";
> Array.isArray(arr);
true
> toString.call(arr);
"[object Array]"
Run Code Online (Sandbox Code Playgroud)
编辑
该数组不会丢失其length属性:
> var arr = [1, 2, 3];
arr.something = "test";
console.log(arr.length, arr.something);
3 "test"
Run Code Online (Sandbox Code Playgroud)
请注意,浏览器报告了属性的正确长度3和正确值.testsomething
| 归档时间: |
|
| 查看次数: |
237 次 |
| 最近记录: |