簡體   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