【问题标题】:Javascript Objects: Using Arguments as object propertyJavascript 对象:使用参数作为对象属性
【发布时间】: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


【解决方案1】:

对象属性名称始终是字符串。所以当你这样做时:

obj[args] = 2;

它把它当作

obj[args.toString()] = 2;

而数组的toString()方法等价于.join(","),所以上面等价于:

obj[args.join(",")] = 2;

与您看到的结果相匹配。

【讨论】:

  • 非常感谢,这很有意义!我挠了挠头,哈哈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 2012-03-20
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多