为什么x [function(){}]有效?

时间:2016-05-18 08:26:00

标签: javascript

为什么以下代码有效?

var x = []
x[function() {}] = "Hi"

/* prints "Hi" */
console.log(x[function() {}])

修改

我知道所有内容都会被转换为字符串属性,但为什么我可以添加x["function() {}"] = "Yo"然后同时拥有这两个属性?

enter image description here

2 个答案:

答案 0 :(得分:8)

根据我的理解,当您在[]中放置任何内容时,该值将转换为字符串。

因此,当您执行[function(){}]时,这意味着["function(){}"]是有效值。

如果你尝试这样的话,那就更明显了:



var foo = {};
var bar = {};

var a = [];
a[foo] = "hello";
a[bar] = "world";

console.log(a[foo], a[bar], Object.keys(a))




答案 1 :(得分:1)

对象(包括数组)的属性名称始终是JavaScript中的字符串。 如果传递给索引器的值不是字符串,则强制执行此操作。 (function (){}).toString() === (function() {}).toString()