Javascript var === 2&&的console.log( '真')。这是如何运作的?

时间:2015-01-26 14:34:49

标签: javascript conditional

var test = 2;

test === 2 && console.log('true');

这让我很困惑。直到前几天我才看到这个。控制台中的输出为true

那么这个魔术是如何运作的?

4 个答案:

答案 0 :(得分:4)

这个(m​​is)使用JavaScript的布尔处理;因为对表达式的懒惰评价, console.log('true')仅在someVar === 2之前评估为true时运行。

此行为称为Short-circuit evaluation

其他用例

顺便说一句,这种类型的编码具有合法的用例。我最喜欢的是使用配置对象

function (options) {
    var options = options || {};
}

这样,即使没有作为参数给出选项对象,也存在选项对象。

答案 1 :(得分:2)

实际上,此代码无效:

var === 2 && console.log('true')
   VM132:2 Uncaught SyntaxError: Unexpected token ===

您可以在浏览器中自行尝试(例如,在Chrome中查找开发人员工具)。

请参阅http://jsfiddle.net/jcdxnte0/


编辑:

语法x && y表示xy都必须为true。这意味着,如果x为真,则y将被评估,如果x为false,则y将不会被评估(因为x为false ,所以两者永远不会成真,那么为什么还要评估y? - 评估从左到右)。在您的情况下,xtest === 2yconsole.log(...)

答案 2 :(得分:2)

可以读作

if( test === 2 ){ console.log('true'); }

它有效,因为(test === 2)表达式,其中解析为值
它将解决为真或假。只有当前面的表达式返回true时,JavaScript才会在&&之后执行代码。 (所以false && console.log()不会记录任何内容。

滥用它并混淆其他开发人员的另一种有趣方式是赋值也返回一个值,例如

var x = 0, y = 5;
(x = y) && console.log( 'x is now 5' );

在这种情况下,(x = y)不仅会将y的值分配给x,还会返回真正的5,因此console.log会被评估。 请不要使用此功能,

答案 3 :(得分:0)

JavaScript评估左侧部分,如果是,则执行正确的部分。您可以使用||运算符执行相反的操作。

还值得注意的是,如果右侧部分包含作业,则应将其括在括号中:

var foo;   
true && (foo = "bar");

虽然它完全有效,但我建议不要使用此语法。