你不知道的 JavaScript 系列中( 31 ) - 让人误解的语句

语句的结果值

以赋值表达式 b = a 为例,其结果值是赋给 b 的值(18),但规范定义 var 的结果值是 undefined。如果在控制台中输入var a = 42会得到结果值 undefined,而非 42

如果你用开发控制台调试过代码,应该会看到很多语句的返回值显示为 undefined,只是你可能从未探究过其中的原因。 其实控制台中显示的就是语句的结果值

下面这样的代码无法运行:

表达式 a + 3 本身没有副作用(比如改变a的值)。它的结果值为5,通过 b = a + 3 赋值 给变量 b。

++ 在前面时,如 ++a,它的副作用(将 a 递增)产生在表达式返回结果值之前,而 a++ 的 副作用则产生在之后

但也不是没有办法,可以使用,语句系列逗号运算符(statement-series comma operator)将

多个独立的表达式语句串联成一个语句:

a++, a中第二个表达式a在a++之后执行,结果为43,并被赋值给b。

上下文规则

还有一个坑常被提到(涉及强制类型转换,参见第 4 章):

第一行代码中,{} 出现在 + 运算符表达式中,因此它被当作一个值(空对象)来处理。[]会被强制类型转换为””,而{}会被强制类型转换为”[object Object]”。

但在第二行代码中,{} 被当作一个独立的空代码块(不执行任何操作)。代码块结尾不需 要分号,所以这里不存在语法上的问题。最后+ []将[]显式强制类型转换(参见第4章) 为0。

else if 和可选代码块

很多人误以为JavaScript中有else if,因为我们可以这样来写代码:

很多JavaScript代码检查工具建议对单条语句也应该加上{ },如:

Original: https://www.cnblogs.com/wzndkj/p/14063043.html
Author: wzndkj
Title: 你不知道的 JavaScript 系列中( 31 ) - 让人误解的语句

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/536455/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球