簡體   English   中英

使用三元運算符或僅短路評估之間的區別?

[英]Difference between using a ternary operator or just short-circuit evaluation?

最近遇到了短路評估,並對此感到有些困惑,因為我上周才開始編程。 據我所知,如果在第一個雙管之前發生的事情是真的,那么它將停止並且不評估雙管之后發生的事情。 例如:

示例 1:

var a = true;
var b = a || {};

所以我假設如果 a 存在則將 a 分配給 b 否則 b 等於一個對象。 我不明白的是我將在哪里使用它以及它與三元運算符有何不同,短路評估是否與:

示例 2:

var a = true;
var b = (a) ? a : {};

為什么要使用示例 1 而不是示例 2,因為它的寫出速度並不慢,或者使用一個比另一個更能提高速度? 或者這只是一個愚蠢的問題,也許我錯過了一些東西。 如果有人可以為我解決這個問題,那就太好了。

短路算子可以通過多種方式影響正確性和性能。

關鍵是避免第二個操作數的副作用或性能影響。

短路可以通過僅在安全的情況下評估第二個操作數來避免錯誤:

var a = a && someFunctionThatWillThrowIfAIsNull(a);

如果較快的函數的結果可以使第二個操作數變得多余,則可以通過將其放在第二個來避免慢速函數:

var a = someFastFunction() || someSlowFunction();

這是不同用法的示例(取決於第一個參數)。 檢查他們每個人的控制台以了解他們的工作方式。

 console.log("'' || {}:", '' || {}); console.log("1 || {}:", 1 || {}); console.log("0 || {}:", 0 || {}); console.log("true || {}:", true || {}); console.log("false || {}:", false || {}); console.log("[] || {}:", [] || {}); console.log(''); console.log("('') ? '' : {}:", ('') ? '' : {}); console.log("(1) ? 1 : {}:", (1) ? 1 : {}); console.log("(0) ? 0 : {}:", (0) ? 0 : {}); console.log("(true) ? true : {}:", (true) ? true : {}); console.log("(false) ? false : {}:", (false) ? false : {}); console.log("([]) ? [] : {}:", ([]) ? [] : {}); console.log(''); console.log("'' && {}:", '' && {}); console.log("1 && {}:", 1 && {}); console.log("0 && {}:", 0 && {}); console.log("true && {}:", true && {}); console.log("false && {}:", false && {}); console.log("[] && {}:", [] && {});

暫無
暫無

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

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