繁体   English   中英

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

[英]Javascript var === 2 && console.log('true'). How does this work?

var test = 2;

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

这使我感到困惑。 直到第二天我才看到这个。 此输出在控制台中为true

那么,这种魔术如何起作用?

这(错误)使用了JavaScript的布尔值处理; 由于表达式的延迟计算,仅当someVar === 2先前被评估为true时,才会运行console.log('true')

这种行为称为短路评估

其他用例

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

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

这样,即使没有将其作为参数提供,options对象也存在。

实际上,此代码无效:

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

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

参见http://jsfiddle.net/jcdxnte0/


编辑:

语法x && y表示xy必须为真。 这意味着,如果x为true,则y将被求值,如果x为false,则y将不被求值(因为x为false,所以两个都永远都不为真,所以为什么要费心计算y ?-评估从左到右进行)。 在您的情况下, xtest === 2 ,而yconsole.log(...)

它可以读为

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

之所以起作用,是因为(test === 2)是一个可解析为value表达式
它将解析为true或false。 然后,仅当前面的表达式返回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得到评估。 请不要使用这个

JavaScript评估左边的部分,如果是,则执行右边的部分。 您可以使用||进行相反的操作 操作员。

还值得注意的是,如果正确的部分包含赋值,则应将其包裹在括号中:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM