首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算属性名称上的JS属性访问器在表达式和赋值中的行为不同。

计算属性名称上的JS属性访问器在表达式和赋值中的行为不同。
EN

Stack Overflow用户
提问于 2017-09-22 07:30:25
回答 1查看 72关注 0票数 0

如下图所示,包含访问属性的对象的案例1、案例2和案例3都是计算属性名

案例1在函数参数中创建这样的对象,而案例2在赋值中创建这样的对象。案例3在语句中创建这样的对象。

为什么案例3会产生语法错误?

案例1

代码语言:javascript
复制
$ node -e "var other = 'b'; console.log({a: 1, [other]: 2}[other]);"
2

案例2

代码语言:javascript
复制
$ node -e "var other = 'b'; var obj = {a: 1, [other]: 2}[other]; console.log(obj);"
2

案例3

代码语言:javascript
复制
$ node -e "var other = 'b'; {a: 1, [other]: 2}[other];"
[eval]:1
var other = 'b'; {a: 1, [other]: 2}[other];
                               ^

SyntaxError: Unexpected token :
    at createScript (vm.js:56:10)
    at Object.runInThisContext (vm.js:97:10)
    at Object.<anonymous> ([eval]-wrapper:6:22)
    at Module._compile (module.js:570:32)
    at evalScript (bootstrap_node.js:353:27)
    at run (bootstrap_node.js:122:11)
    at run (bootstrap_node.js:389:7)
    at startup (bootstrap_node.js:121:9)
    at bootstrap_node.js:504:3

节点版本

代码语言:javascript
复制
$ node --version
v6.11.2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-22 07:37:36

简而言之,您把花括号作为块语句,而不是对象

错误来自一个不能是标签计算属性名,因为它需要一个标识符,而不是一个计算的属性。

第一个调用被定义为表达式,在最后一个情况下不是。

为了防止出现这种情况,可以将花括号包装为表达式的圆括号。

代码语言:javascript
复制
eval("var other = 'b'; {a: 1, console.log('block!') };");
console.log(eval("var other = 'b'; ({a: 1, [other]: 2})[other];"));

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46359164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档