JS的undefined與null,==與===的區別


一、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;

注:聲明與定義的區別:

let   a ; //聲明
let   b   =   10 ; //聲明加賦值===定義
//也就是說一個變量如果定義了,那么它一定是聲明了,反過來聲明了,卻不一定有定義;
// 比較形象的解釋:
// 聲明:好比你和你的女朋友說我愛你,我將來會娶你,但是這僅僅是口頭上面的聲明而已;let b;
// 定義:就是比如你和你的女朋友說我愛你,我將來會娶你,緊接着你把你的聘禮給了她:let b = 10萬塊;
 
注意:
 
1.定義是一件神聖而偉大的事情,所以通常對於其它語言來說定義只有一次,舉個C語言的例子:
int a = 100;//聲明加賦值===定義
float a = 10;//這里就出錯了,不能重復定義
 
2.只要聲明的時候沒有定義,后面的賦值都僅僅是賦值:
int a;//聲明
a = 10//賦值
a = 100//賦值
 
3.對於JS這個允許渣男存在的語言來說:
var a = 100;//向女朋友說娶她,將來給它100萬做聘禮;
var = 0.01;//過了幾天發現自己是個月薪三千的low逼,后來重新對女朋友說會娶她,並說聘禮100塊錢人民幣
a = 10;//即使后來又給了她10萬塊
a = 100;//又給了100萬塊,這僅僅是給而已,錯過了當時神聖的定義;
 
4.索性JS還有一個let機制,牽制男人行為的懲罰機制:
let a = 100//向女朋友說娶她,將來給它100萬做聘禮;
let a = 0.01;//過了幾天發現自己是個月薪三千的low逼,后來重新對女朋友說會娶她,並說聘禮100塊錢人民幣;
緊接着會發現JS的老天爺看不下去了,給了他一個晴天霹靂:
||
||
\/
說狗男人,你涉嫌違反JS世界的let承諾書,根據let承諾書第521條第121款的說明,你無權更改承諾!
你之前可是對你女朋友說的100W,現在只有多少,你好好看看!

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM