有一天,我在编写游戏时无意中发现了这一点:
var foo = function() { alert("Hello, World!"); }
foo[0] = "Zero";
foo[1] = "One";
foo[2] = "Two";
foo[3] = "Three";
foo(); // Alerts "Hello, World!"
alert(foo[2]); // Alerts "Two"
为什么 JavaScript 允许你这样做?这是一个错误吗?
最佳答案
这里没有数组。例如,Array.isArray(foo)
为 false。
相反,您为 foo
提供了四个属性,分别命名为 "0"
、"1"
、"2"
和 "3"
[1],具有不同的值。这是完全有效的,因为函数也是对象;您始终可以将属性附加到对象,无论您喜欢什么名称。
你还可以这样做:
foo.otherProp = "hi!";
alert(foo.otherProp);
<小时/>
[1]:请注意,属性名称在设置之前始终会转换为字符串;执行 foo[{ toString: function () { return "baz"; }] = 5
将与 foo["baz"] = 5
或 foo.baz = 5
相同。同样,执行 foo[0] = "whatever"
与执行 foo["0"] = "whatever"
相同。
关于javascript - 为什么 JavaScript 允许将数组和函数存储在一个变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18026129/