javascript - Eloquent Javascript - 关于参数对象的第 4 章

标签 javascript arrays variables arguments

我知道这里有很多 EloqJS 问题,但我还没有看到这个问题,这让我陷入了困境。我很好奇对象条目中的关键松鼠(squirrel:squirrel)如何没有被这段代码中函数传递的参数替换:

 function addEntry(squirrel) {
  var entry = {events: [], squirrel: squirrel};
  for (var i = 1; i < arguments.length; i++)
    entry.events.push(arguments[i]);
  journal.push(entry);
}
addEntry(true, "work", "touched tree", "pizza",
         "running", "television");

我希望它进入 {events: [], true: true},但这不是返回的内容。我显然在这里错过了什么?原始代码在 http://eloquentjavascript.net/04_data.html#arguments_object

最佳答案

因为对象键是文字:它们不会在运行时更改,也不会充当要替换为值的变量。

如果您查看 object initialiser section of the spec (11.1.5) ,它指定对象文字由属性名称/值列表组成,属性名称定义为以下之一:

IdentifierName
StringLiteral
NumericLiteral

IdentifierName 的规则 are defined in section 7.6包括大多数 unicode 字符,但不包括保留字或空格。

任何 IdentifierName 都可以用引号括起来成为有效的 StringLiteral,尽管反之并不总是正确的(StringLiteral 包含标点符号或空格需要引号才有效)。您也可以使用以下方法定义对象:

{'events': [], 'squirrel': squirrel}

从 ES6 开始,现在有一个符号来指定键应该是变量的值,而不是它自己的标识符或文字。这是 defined in section 12.2.6作为 ComputedPropertyName,使用 [expr] 语法。对于具有 true: true 属性的对象,您可以使用 ES6 代码:

{'events': [], [squirrel]: squirrel}

关于javascript - Eloquent Javascript - 关于参数对象的第 4 章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31007748/

相关文章:

javascript - jQuery:使用 CSS 为动态元素设置动画?

arrays - 类型 Any 在 Swift 3.0 中没有下标成员错误?

php - 如何使用 PHP 变量查询 MySQL 并通过 Google Charts 显示结果?

javascript - isNull() 的目的是什么?

javascript - 如何使用最接近的和 parent 的javascript方法来获取 Angular 6中的td值

python - 如何使用python将数据显示为数组格式

java - 根据输入询问变量数量(for/while 语句?)

c - 在c中生成新变量

javascript - 检测字符串数组中的异常值 - VanillaJS 和 parseInt

javascript - VueJS : How to Edit an Array Item