簡體   English   中英

三元語句比javascript中的if / then / else語句快嗎?

[英]Are ternary statements faster than if/then/else statements in javascript?

我看到很多:

var something = (is_something_true()) ? 3 : 4;

在javascript中。 這比

var something;
if (is_something_true()) {
    something = 3;
} else {
    something = 4;
}

還是為了方便起見簡潔地編寫了它?

請享受這一點-如果差異在統計上是有效的,那么結果(對或錯)也很重要-顯然,這只是機器上影響瀏覽器性能的其他因素:

鏈接在這里

結果不同!

兩者之間有根本的區別,三元語句是表達式而不是控制流。 如果存在某人將其寫為三元表達式而不是標准if / else /的情況,那么當兩者都可以工作時(我認為),它們會使代碼在沒有充分理由的情況下難以閱讀。

在速度方面,應該沒有差異。 除非您使用的是非常糟糕的javascript實現。 這兩個語句中最慢的部分是分支。

您應該首先為提高可讀性而寫,然后再進行一百五十秒的微小優化。 在許多情況下,第一種形式更易於閱讀,並且一種或另一種方式的性能可能沒有太大區別。

(即使您不同意並認為第二種形式更易於閱讀,詢問相對性能差異仍然是錯誤的問題。)

這是統計數據 在此處輸入圖片說明

經過多次測試和觀察,可以得出結論,在大多數情況下,三元運算符( ?: :)比if/else慢。

是的,兩者之間的差異可以忽略不計。

但是,差異是如此之小,以至於您使用哪一個都沒關系(我更喜歡if / else),因為它們有助於提高可讀性,如果有人正在遍歷您的代碼,或者您也許自己在追查代碼,那么它們將為您節省大量時間說3個月左右。

對於那些想要檢查差異的人,請嘗試以下代碼:

// declarations  
var num1 = 10, num2, i = 0, startTime, endTime, x, y;

// start timer
startTime = Math.floor((new Date()).getTime());

for(; i < 1e8; i++) {
  // first part if /else
  if(x == 10)
    y = x;
  else
    y = 0;

  // second part ternary
  y = (x == 10) ? x : 0;
}

// end timer     
endTime = Math.floor((new Date()).getTime() - startTime);
document.write("Time taken " + endTime + " ms");  

注意:注釋其中一部分,然后執行代碼並運行循環進行大量迭代(上面的代碼執行了數百萬次迭代)。

提示:嘗試多次運行循環以獲得平均值。

暫無
暫無

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

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