簡體   English   中英

為什么(true && 1)返回1,但(1 && true)返回true?

[英]Why does ( true && 1 ) return 1, but ( 1 && true ) returns true?

在CI中,知道真假分別評估為1和0。 在這種情況下show只是打印到屏幕...不知道這里發生了什么。 我期待得到true回來。 這個1是搞亂我的人緣。

show(1 && true);
true



show(true && 1);
1

簡單地說 - 這就是&&的定義方式。 在Javascript中, a && b返回a ,如果a是falsy和b ,如果a是truthy。

反過來a || b a || b返回a ,如果a是truthy和b ,如果a是falsy。

這在直覺上是有道理的 - 如果a a && ba && b a是假的,那么為什么還要費心閱讀表達式的其余部分呢? 你已經知道整件事都是假的。 所以只返回false。 但是Javascript決定返回a ,這是假的,而不是彌補值false而無處不在。

這是基於所有C風格語言共有的短路評估。

它允許在Javascript中表達很多。 例如這種模式:

var foo = function(opts) {
    opts = opts || {}
    // ...
}

實現可選參數opts 如果opts沒有在全部通過, opts = opts || {} opts = opts || {}opts設置為{} ,因此其余代碼不必知道opts未被傳遞。

從長遠來看,它相當於以下內容:

var x = a || b; // is equivalent to
var x;
if(a) {
    x = a;
}
else {
    x = b;
}

var y = a && b; // is equivalent to
var y;
if(!a) {
     y = a;
}
else {
    y = b;
}

因此,Javascript可能比C或Java簡潔得多,因為簡單的if語句可以被||替換 &&完全。 有時這會使代碼更簡潔,更不易讀,更像Perl,有時候它允許新的Javascript模式,比如opts = opts || {} opts = opts || {}

另一種用途是模式

var displayName = user.fullname || user.email;

這意味着“如果可用則使用全名;如果沒有,請回復電子郵件。” 我個人覺得這個表達性和可讀性,但它可以說是簡潔和模糊,取決於你來自哪個Javascript社區。 由於這樣的例子,基本上事實上truthy值比falsy值更加多樣化,使用短路|| 比你的問題中的短路&&更常見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM