javascript - 为什么 JavaScript 允许将数组和函数存储在一个变量中?

标签 javascript arrays function variables

有一天,我在编写游戏时无意中发现了这一点:

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"] = 5foo.baz = 5 相同。同样,执行 foo[0] = "whatever" 与执行 foo["0"] = "whatever" 相同。

关于javascript - 为什么 JavaScript 允许将数组和函数存储在一个变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18026129/

相关文章:

javascript - ReactCSSTransitionGroup 不添加类

javascript - Bigcommerce 处理付款与 api 401 错误代码 10001

java - 向数组添加一个值?

java - 识别类本身后使用类函数

javascript - react : export function with connected function

javascript - 从字符串模板获取通配符名称

php - 使用 jQuery 从数据库循环遍历 JSON

arrays - 如何在Fortran中访问数组中的最后一项?

python - 将拆分值分配给多个变量

java - Java 中的复数求和函数