首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript:{}==false是SyntaxError吗?

JavaScript:{}==false是SyntaxError吗?
EN

Stack Overflow用户
提问于 2009-10-02 13:34:46
回答 2查看 923关注 0票数 16

在Firefox3.5中,我在Firebug控制台中键入以下内容:

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

对此有何解释?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-02 13:56:41

{

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

}

立即结束不包含任何语句的语句块。这很好。但现在解析器正在寻找下一条语句:

==false

哈?这不是一个语句;语法错误。

语句块是用来做什么的?好吧,每次你说:

if (something) {
    ...
}

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

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

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

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

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

2中的...results,因为语句块本身不会创建新的作用域。

JavaScript以这种方式定义流控制和语句块,因为C(以及从它派生的其他语言)是这样做的。不过,这些语言并没有让{}作为对象文字表达式提供双重功能,因此它们不存在使这成为另一个JS错误特性的歧义。

即使是这个wannabe-字面:

{
   a: 1
}

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

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

这就是not the only place,它松散的语法可能会让你陷入困境,因为它会对你认为是表达式的东西做一些其他的陈述。

票数 41
EN

Stack Overflow用户

发布于 2012-01-05 15:51:27

简单地说,{}==false是由Js编译器编译成{};==false的,所以这是语法错误。你应该写({})==false,它会返回false。

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

https://stackoverflow.com/questions/1509535

复制
相关文章

相似问题

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