1. 程式人生 > >js基礎之關於Boolean及相等運算子的隱式型別轉換

js基礎之關於Boolean及相等運算子的隱式型別轉換

Boolean函式

根據 w3c規範 布林物件共有這幾種方法:

方法 描述
把邏輯值轉換為字串,並返回結果。
返回 Boolean 物件的原始值。


布林值常用於JavaScript中的控制語句中。例如JavaScript的if/else語句,如果布林值為true執行第一段邏輯,如果為false執行另一段邏輯。

JavaScript的值都可以轉化為布林值,下面這些值會被轉換為false:

undefined
null
0
-0
NaN
""//空字串

所有其他值,包括所有的物件(陣列)都會轉化為true。

也就是說:

var c = Boolean([]);
console.log(c); // true

結果為真。

boolean應用

Boolean常常應用的有兩種,一種是if(a==b)?,一種是if(o)?。

if(o)?

對於第二種,只要當o不是false,null和undefined時就會執行if之後的程式碼。
也就是說 if({}&&[]),為真。

但是

var fn = function() {};

if (fn && fn()) {
    console.log(22222);
}

這個條件判斷執不執行呢?
結果是不執行的,因為fn()

是undefined啊小傻瓜

var obj = {};
var string = "";
var array = [];
var fn = function() {};

if (obj) {
    console.log("obj");
}
if (string) {
    console.log("string");
}
if (array) {
    console.log("array"); //空字串不輸出
}
if (fn) {
    console.log("fn");
}

結果為
輸出

還是那句話咯

undefined、null、0、-0、NaN、”” 為false

這裡寫圖片描述
這裡寫圖片描述

if(a==b)?

這種應用呢,需要用到隱式型別轉換,比較麻煩一點

== 和 === 運算子用於比較兩個值是否相等,但是===為嚴格相等,它不會進行隱式型別轉換,==會進行隱式型別轉換。

嚴格相等運算子”===“首先計算其運算元的值 然後比較這兩個值。

===

相等運算子”==“

這裡寫圖片描述
這裡寫圖片描述

也就是說:

這裡寫圖片描述
這裡寫圖片描述

懵了嗎?哈哈 一言以蔽之,這之中所有的比較都是傾向於轉化為數值再進行運算的。


if (null == undefined)  // true
if (null == 0) 
if (null == NaN)
if (null == '') 
if (undefined == 0)
if (undefined == '')
if (undefined == NaN)
if (NaN == 0) 
if (NaN == '')
if (0 == '') //true
if (NaN == false)
if (0 == false)//true
if ('' == false)//true
if (undefined == false)
if (null == false)
if (NaN == true)
if (0 == true)
if ('' == true) 
if (undefined == true)
if (null == true)
if ([] == null)
if ([] == undefined)
if ([] == 0)//true
if ([] == '') //true
if ([] == NaN)
if ([] == false)//true
if ({} == null)
if ({} == undefined)
if ({} == 0) 
if ({} == '') 
if ({} == NaN) 
if ({} == false)
if([1]==[1])
if({a:1}=={a:1})

說說最後兩個是為嘛吧,因為其都為物件,物件為引用值曉得吧,所以比較的是記憶體中的位置,指標指向的位置不一樣,所以不相等。

這個面試筆試又常常考,所以盡力記住咯。
我把幾個對的拎出來了 ↓

if (null == undefined)  // true
if (0 == '') //true
if (0 == false)//true
if ('' == false)//true
if ([] == 0)//true
if ([] == '') //true
if ([] == false)//true

程式碼更新在github 歡迎驗證