【发布时间】:2016-04-09 21:06:21
【问题描述】:
我正在使用 Arguments 对象重新实现 memoize 函数。我想知道为什么这会起作用。例如,传入 2 个参数:
var args = Array.prototype.slice.call(arguments); // input: 1,2
然后我会将 args 数组存储到一个对象中。例如,
var obj = {};
obj[args] = 2;
如果你要调用 Object,你会看到:
{ 1,2: 2 }/*shows as this*/ { [1,2]: 2 }/*but not as this*/
不是我想要第二个对象,只是好奇引擎盖下发生了什么。这就是你所说的Javascript强制吗?
【问题讨论】:
-
所有属性名称都是字符串,所以
args正在转换为字符串,是的。 -
使用数组作为对象属性名并不能很好地工作。数组将首先转换为字符串,结果将是属性的实际名称。
-
通过
array.join(",")将数组转换为字符串工作 -
啊,我明白了!非常感谢您提供的信息。我不确定发生了什么,每天都在学习新东西!
标签: javascript arrays object arguments coercion