js基礎之關於Boolean及相等運算子的隱式型別轉換
阿新 • • 發佈:2019-02-20
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()
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 歡迎驗證