一、JS的==與===
1.JS的==是用於判斷等值的,它判斷之前會先進行類型轉換,然后再比較值;
demo:
console.log("1==1:",1==1) console.log("1=='1':",1=='1')
結果:
2.JS的===是用於判斷類型是否相等,它直接比較類型:
demo:
console.log("1===1",1===1) console.log("1==='1'",1==='1')
結果:
二、JS的undefined與null
1.正文
1.1引入正文前還要寫個知識儲備:
JavaScript 數據類型:
值類型(基本類型):字符串(String)、數字(Number)、布爾(Boolean)、對空(Null)、未定義(Undefined)、Symbol(這個類型是后來新加的,有興趣可以自己再查查)。
引用數據類型:對象(Object)、數組(Array)、函數(Function)。
值得注意的是,null與undefined都是只有一個值的基本數據類型,但是我們有時候會疑惑,null是否是值類型,但是當我打印typeof(null)的時候卻是一個Object,即引用類型,具體原因如下:
這是因為在js存儲中對象是以000開頭的,而null是一個空,相當於全0,所以即使null不是Object類型,當我們使用typeof null打印的時候也是顯示:Object
demo:可以使用instanceof查看null是否真的屬於Object
let obj = {} console.log("obj的typeof打印:",typeof(obj)) console.log("obj是對象嗎:",obj instanceof Object) console.log("null的typeof打印:",typeof(null)) console.log("null是對象嗎:",null instanceof Object)
結果:
2.2正文正式開始:
1.JS的undefined是形容某變量聲明了但是沒有賦值。
demo:
let a;
console.log("我是a,我已經聲明了變量,但是我還沒有被賦值,下面是我的一些狀態:") console.log("a的值:",a) console.log('a的類型:',typeof(a)); console.log("a==undefined嗎:",a==undefined) console.log("a===undefined嗎:",a===undefined)
運行結果:
2.而JS的null出現的原因是:某變量雖然有定義,但是卻賦值為null;
demo:
let b = null; console.log("b的值:",b)
運行結果:
3.判斷一個變量,為undefined或者null都可能正確的情況:
let a; console.log("我是a,我已經聲明了變量,但是我還沒有被賦值,下面是我的一些狀態:") console.log("a的值:",a) console.log('a的類型:',typeof(a)); console.log("a==undefined嗎:",a==undefined) console.log("a===undefined嗎:",a===undefined) console.log('a==null嗎:',a==null); console.log('a===null嗎:',a===null);
運行結果:
運行結果的解釋:
(1)對於undefined:a為已經聲明的變量,但是在聲明的時候沒有賦值,也就是沒有定義,所以會輸出undefined;由於a的值與類型都是undefined,所以不管是值判斷還是類型判斷都顯示正確。
(2)對於null:a雖然聲明了,但是聲明的時候沒有賦值,也就是沒有定義,所以a的值等於空,也就是等於null;但是a的類型是undefined,不是null,所以判斷a===null時,打印為:false;
注:聲明與定義的區別:
