gpt4 book ai didi

javascript - 通过使用点添加值将数组更改为对象(大写)

转载 作者:数据小太阳 更新时间:2023-10-29 04:40:45 29 4
gpt4 key购买 nike

使用点符号向数组添加属性是否会将其更改为对象?

var arr = [];

arr.something = "test";

是数组吗?

我不这么认为,但 underscore.js 说是

console.log( _.isArray(arr) );  //true

http://jsfiddle.net/wZcyG/

最佳答案

如果您查看 underscore.js source ,您会看到 isArray 函数定义为:

 _.isArray = nativeIsArray || function(obj) {
return toString.call(obj) == '[object Array]';
};

浏览器的 native Array.isArray 说它是一个数组,因为它已被实例化为数组。如果浏览器没有原生的 isArray,则 underscore.js 使用第二个选项:比较对象上的 toString 以查看它是否与字符串 [对象数组].

仅仅添加一个属性不足以改变对象的类型(按照JavaScript虚拟机的说法,它仍然是一个刚好是数组的对象)。 JavaScript 是一种动态语言,这意味着您可以向内置对象添加属性,但这样做不会改变它们的本来面目;您只是扩展了它们。例如,Prototype.js 过去常常通过向它们添加额外的属性(如迭代器、过滤器、映射函数等)来扩展原生对象。

您可以很容易地看到 Chrome 中的行为:

> var arr = [];
arr.something = "test";

> Array.isArray(arr);
true

> toString.call(arr);
"[object Array]"

编辑

数组不会丢失其length 属性:

> var arr = [1, 2, 3];
arr.something = "test";
console.log(arr.length, arr.something);

3 "test"

请注意,浏览器报告了正确的 3 长度和 something 属性的正确的 test 值。

关于javascript - 通过使用点添加值将数组更改为对象(大写),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17845488/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com