据说javascript中的所有东西都是对象。因此,为了详细理解这个概念,我编写了以下代码,但得到了一些意想不到的结果。
var color = [];
console.log(color.constructor === Array);
color[color['purple'] = 2] = 'green';
console.log(color);
console.log(color.constructor === Array);
console.log(Array.isArray(color));
根据我的理解,数组只有在键值为number时才能保存值。为了将key存储为字符串,我们使用对象。然而,上面的代码导致了这一结果。
true
[ <2 empty items>, 'green', purple: 2 ]
true
true
typeof color
将导致object
,但这是所有数组的通用情况。在color
变量中,purple: 2
是一个有效的元素吗?color
不应该是对象而不是数组吗?或者,有没有其他内置的方法可以让我检查变量是数组还是对象?
这些类型的问题以前也被问过,但场景略有不同。我寻找了这个特定的案例,但没有得到任何令人满意的结果。
发布于 2018-08-16 04:12:45
color[color['purple'] = 2] = 'green';
让我们把它分解一下。首先,它执行color['purple'] = 2
。这将导致颜色为:[purple: 2]
。如果您现在在控制台执行var color = []; color['purple'] = 2;
,则输出将为2。
因此,在执行内部语句之后,等价的语句是color[2] = 'green'
。由于这是一个数字赋值,它将值'green‘赋值给数组的第三个元素(位置2),并在位置0和位置1处创建两个空项。
因此,输出为:[<2 empty items>, green, purple: 2]
@js1568写得很好的答案。太棒了。
@Kartik Chauhan回答你的主要问题-“紫色”如何成为数组的有效键?
JS数组不仅仅是数值可访问的数组。它们更像是地图,其中的键可以是任何对象。您可以在浏览器控制台中尝试此代码。
var x = []; x[{name: "Kartik"}] = 25; x[{name: "Kartik"}];
输出将是25。
因此,紫色值是数组的有效键。
https://stackoverflow.com/questions/51865641
复制相似问题