gpt4 book ai didi

JavaScript 语法疯狂 - 任何人都知道为什么会发生这种情况的背景

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:16:37 27 4
gpt4 key购买 nike

我有点迷惑为什么下面的代码会按照它的方式做事。

对于以下表达式,我希望结果为 1,因为在文字的右侧我们实际上有一个 obj。

表达:

> { a : 1 }.a 

Chrome 结果:

Syntax error: Unexpect token .

结果 NodeJS

1

(另一个问题:为什么 nodejs 和 chrome 在此(以及以下)上有所不同)

虽然表达式本身存在语法错误,但将其分配给变量仍然有效。

> var x = { a : 1 }.a; x;

结果:

1

现在在表达式周围使用 eval 在 Chrome 和 NodeJS 中确实有效

> eval({ a : 1 }.a)

结果 Chrome 和 Node

1

现在使用 eval 和基于字符串的表达式两个平台都不起作用

eval("{ a : 1 }.a")

Chrome 结果:

SyntaxError: Unexpected token >

结果 NodeJS:

... //REPL waits more code

最后括号解决了所有问题,但为什么呢?

> eval("({ a : 1 }.a)")

结果:

Works everywhere

最佳答案

eval 接受一个字符串,所以调用 eval({ a : 1 }.a)eval("1").

在语句上下文中,{} 分隔 block ,而不是对象文字。您可以使用 () 作为分组运算符进入表达式上下文。

所以:

{ a : 1 }.a

实际上是 block 、标签、数字文字和点访问什么都没有:

{
a: 1
}

.a

Node REPL 实际上一开始就在表达式上下文中运行,但这并不常见。他们像 eval("("+ replInput + ")")

一样运行你的代码

关于JavaScript 语法疯狂 - 任何人都知道为什么会发生这种情况的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15809711/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com