【问题标题】:Why does having a trailing value on an object literal return that value?为什么在对象文字上有尾随值会返回该值?
【发布时间】:2021-05-28 06:48:42
【问题描述】:

我能做到:

{test : 10}

但是这个有效的 JS 是怎么回事,为什么当我将它添加到 chrome js 控制台时会得到 7?

{test: 10, 7}

如果没有密钥,这个尾随的 7 是如何有效的?

这是一种特殊的 JS 对象字面量语法吗?我在哪里可以了解更多关于它的信息以及为什么它评估为 7?

当我这样做时: const test = {test: 10, 7}; // VM140:1 Uncaught SyntaxError: Unexpected token '}'

这给了我一个预期的错误,那么为什么不将它分配给一个变量它是有效的 JS 并且控制台返回值 7?

当我这样做时:

{test: 10, 7, 8}

然后我得到 8

如果我尝试 JSON 表示法,我也会收到错误:

{'test': 10, 7}

这是怎么回事?

【问题讨论】:

标签: javascript object-literal


【解决方案1】:

对象不相关;不是很有用的逗号运算符返回最后一个值。

console.log( (10, 7) ) // 7

我们在这里需要额外的括号,这样它就不会被解释为“console.log”的第二个参数,但同样的事情正在发生。

【讨论】:

    【解决方案2】:

    这里发生了两件事,但关键是这不是 JavaScript 对象字面量。如您所见,const test = {test: 10, 7} 失败。

    首先,{let foo=7;} 是有效代码;大括号被用作block scope,而不是对象表示法。

    其次,test: statement 被用于label a statement,而不是作为对象中的键。

    所以你的代码是一样的:

    {
        test:
        (10, 7)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      • 2020-06-05
      相关资源
      最近更新 更多