JavaScript短路表示式

antzone發表於2018-07-12

JavaScript標準的概念中,並沒有短路表示式概念。

只是程式碼實際表現和我們們平常說的“短路”類似,所以就有了這麼一個名字。

下面就對它做一下簡單介紹,需要的朋友可以做一下參考。

短路表示式:作為"&&"和"||"操作符的運算元表示式,這些表示式在進行求值時,只要最終的結果已經可以確定是真或假,求值過程便告終止,這稱之為短路求值。這是這兩個操作符的一個重要屬性。

程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
foo = foo||bar;

上面程式碼表達的意思與下面的程式碼等效:

[JavaScript] 純文字檢視 複製程式碼
//如果foo存在,值不變,否則把bar的值賦給foo
if(!foo)
  foo = bar;

在javascript的邏輯運算中,0、""、null、false、undefined、NaN都會判定為false,而其他都為true。所以在上式的foo = foo||bar;中,||先計算第一個運算數,如果可以被轉換成true,也就是表示foo已經存在有值,那麼返回左邊這個表示式的值,否則計算第二個運算數bar。另外,即使||運算子的運算數不是布林值,仍然可以將它看作布林OR運算,因為無論它返回的值是什麼型別,都可以被轉換為布林值。

當然,使用如下做法會更加嚴謹:

[JavaScript] 純文字檢視 複製程式碼
if(foo)      //不夠嚴謹
if(!!foo)    //更為嚴謹,!!可將其他型別的值轉換為boolean型別

下面是幾個測試程式碼:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var foo;
var number = 1;
var string = "string";
var obj = {};
var arr = [];
 
console.log(typeof(foo));  // undefined
console.log(typeof(number));  //number
console.log(typeof(string));  //string
console.log(typeof(obj));  //object  
console.log(typeof(arr));  //object
  
console.log(typeof(!!foo));  // boolean
console.log(typeof(!!number));  //boolean
console.log(typeof(!!string));  //boolean
console.log(typeof(!!obj));  //boolean
console.log(typeof(!!arr));  //boolean

相關文章