如果声明被一些错位代码短路 - 为什么?

时间:2014-09-01 23:19:58

标签: javascript

任何人都可以解释一下,为什么这段代码会打印出来"最近怎么样?"

if(x=21) 342423 
  console.log('whats going on?')

我不小心在if条件语句旁边键入了一个数字,就像上面的程序一样。这引起了一个奇怪的副作用,条件语句被短路,即使括号中的东西被评估为假。令人讨厌的是它没有抛出翻译错误。

1 个答案:

答案 0 :(得分:0)

基本上有两种方法可以在Javascript中编写条件语句(不考虑三元组):
大括号:

if (condition) {
    foo();
} else {
    bar();
}

......或没有curlies:

if (condition)
    foo();
else
    bar();

然而,第二个选项只能用于单个语句,而不是更复杂的逻辑 如果没有else,则第二个示例将用作

if (condition)
     foo();
//Other code follows, regardless of how the condition resolves
console.log("This is always shown");

以上也是您的问题:

if(x=21)
    342423
console.log('whats going on?')

您只是以不同方式缩进代码,可能会导致您的混淆 342423是Javascript中的有效声明,就像foo()一样,无论条件如何,都会导致console.log()被执行。
缺少的分号由脚本解析器自动添加 另请注意,x = 21x == 21x === 21在Javascript中是非常不同的东西,您可以在此网站的其他答案中查找它们。