簡體   English   中英

if(x){foo(); 和x? foo():0;

[英]Difference between if (x) { foo(); } and x ? foo() : 0;

小片1:

if ( x ) { 
    foo();
}

摘錄2:

x ? foo() : 0;  

這兩個片段有什么區別?

編輯:更正了語法錯誤。

更新 :順便說一句,似乎有一個更短的符號:

x && foo();

片段#2是無效的ECMAScript表達式,因為它缺少必需的: blah以使其成為三元組。

編輯:兩個片段之間沒有真正的區別,如果x是真的,它們都會調用foo 如果x是假的(undefined / false / empty string / 0 /),那么第一個片段將不會評估為任何內容,后一個片段將評估為0但該0確實對腳本沒有影響。

我想你的意思是問下面的問題

// Why should I use
if (x) {
  do();
}

// instead of 
x && do();

要么

// Why should I use
if (x) {
  do(); 
} else {
  dont();
}

//instead of 
x ? do() : dont()

在編寫時,輸出沒有區別。 我不喜歡在這些情況下使用三元組或&&運算符,因為使用三元組和&&的語義。 三元組返回您未使用的值,&&表達式也是如此。 因此,我寧願使用語言打算使用運算符的方式。

但是,我喜歡使用&&進行空檢查

var val = obj && obj.getValue();

請注意,在這種情況下,我們使用表達式的返回值

通常, if是一個語句(例如,您不能將它分配給變量)和三元運算符?:是表達式的一部分(產生一個可以賦給變量的值)。

此外, if塊可以包含語句,而?:的組件只能包含表達式。

在你給出的例子中,沒有區別,因為你沒有使用?:的結果。 只有當x是真值時,兩個片段才會評估foo()

暫無
暫無

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

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