gpt4 book ai didi

JavaScript:{}==false 是 SyntaxError?

转载 作者:可可西里 更新时间:2023-11-01 01:20:23 25 4
gpt4 key购买 nike

在 Firefox 3.5 中,我在 Firebug 控制台中输入:

false=={} // => evals to false
{}==false // syntax error

这是什么原因?

最佳答案

{

在语句的开头表示一个“语句 block ”(参见 ECMA-262-3 第 12.1 节),其中包含一个语句列表。

}

立即结束没有语句的语句 block 。没关系。但是现在解析器正在寻找下一条语句:

==false

嗯?那不是声明;语法错误。

语句 block 有什么用?好吧,你每次说的时候都在写一个语句 block :

if (something) {
...
}

JavaScript 将这些流控制语句定义为:

if "(" <expression> ")" <statement> [else <statement>]

即。在没有大括号的单语句形式中。然后它允许您在任何可以使用单个语句的地方使用语句 block ,这意味着您可以使用 if-braces-many-statements。但这也意味着您可以拥有一个单独的语句 block ,而无需关联的流程控制语句。

这绝对没有任何实际意义!您可能会认为它可以隐藏信息,但事实并非如此:

var a= 1;
{
var a= 2;
}
alert(a);

...结果为 2,因为语句 block 本身不会创建新范围。

JavaScript 以这种方式定义流程控制和语句 block ,因为 C(以及从它派生的其他语言)也是如此。不过,这些语言并没有使 {} 充当对象文字表达式的双重职责,因此它们没有使这成为另一个 JS 错误特征的歧义。

即使是这个想要的文字:

{
a: 1
}

是一个有效的语句 block ,因为‘:’用于表示语句中的标签。 (并且 1 是无用的表达式语句,省略了分号。)标签是从 C 继承的另一个特性,在 JavaScript 中很少使用。它们不像积木那样完全没有意义,但很少需要它们,而且通常被认为品味不佳。

(具有两个属性的文字会导致语法错误,因为对象文字使用逗号分隔符,但标记的语句必须用分号分隔。)

这是 not the only place JavaScript 松散的语法可能会通过对您认为是表达式的内容进行其他声明来使您感到困惑。

关于JavaScript:{}==false 是 SyntaxError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1509535/

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