你必須知道的Javascript知識點(diǎn)之"字面量和對應(yīng)類型"說明介紹
代碼示例:
var date1 = new Date(2013,1,1);
var date2 = new Date(2013,1,1);
date1 == date2; //執(zhí)行結(jié)果為false
date1 === date2; //執(zhí)行結(jié)果為false
var num1 = new Number(10);
var num2 = new Number(10);
num1 == num2; //執(zhí)行結(jié)果為false
num1 === num2; //執(zhí)行結(jié)果為false
num1 == 10; //執(zhí)行結(jié)果為true
10 == num2; //執(zhí)行結(jié)果為true
num1 === 10; //執(zhí)行結(jié)果為false
10 === num2; //執(zhí)行結(jié)果為false
之所以要寫這個(gè)主題,是因?yàn)槿掌陬愋偷谋容^經(jīng)常會出現(xiàn)意想不到的錯(cuò)誤,幾乎每個(gè)剛接觸javascript的開發(fā)人員都會遇到這個(gè)問題。
到底是為什么
規(guī)則1
javascript中一切都是對象(引用類型),除了這幾個(gè)類型的字面量(值類型):Boolean(如:true)、Number(如:100)、undefined、null。
規(guī)則2
引用類型之間用"=="或“===”做比較運(yùn)算時(shí),只要兩者不是指向同一份內(nèi)存地址,都會返回false。
代碼示例
var date1 = new Date(2013,1,1);
var date2 = new Date(2013,1,1);
date1 == date2; //執(zhí)行結(jié)果為false
date1 === date2; //執(zhí)行結(jié)果為false
圖片示意
規(guī)則3
引用類型和對應(yīng)的值類型之間用“=="做比較運(yùn)算時(shí),會先進(jìn)行類型轉(zhuǎn)換,然后進(jìn)行比較。
代碼示例
var num1 = new Number(10);
var num2 = new Number(10);
num1 == 10; //執(zhí)行結(jié)果為true
10 == num2; //執(zhí)行結(jié)果為true
規(guī)則4引用類型和對應(yīng)的值類型之間用“==="做比較運(yùn)算時(shí),始終返回false。
代碼示例
var num1 = new Number(10);
var num2 = new Number(10);
num1 === 10; //執(zhí)行結(jié)果為false
10 === num2; //執(zhí)行結(jié)果為false
特殊的String類型
string是特殊的引用類型,javascript解釋器遇到兩個(gè)一樣的字面量會未他們分配同一個(gè)內(nèi)存地址,javascript本身也保持值語義(一旦創(chuàng)建不能修改)。
代碼示例
var str1 = new String('hello');
var str2 = new String('hello');
var str3 = 'hello';
var str4 = 'hello';
str1 == str2 //指向結(jié)果為false
str1 === str2 //指向結(jié)果為false
str3 == str4 //指向結(jié)果為true
str3 === str4 //指向結(jié)果為true
str2 == str4 //指向結(jié)果為true
str2 === str4 //指向結(jié)果為false
圖片示意

值類型的內(nèi)存格局
代碼示例
1 var num1 = 1;2 var num2 = 1;
圖片示意
相關(guān)文章
200行代碼實(shí)現(xiàn)blockchain 區(qū)塊鏈實(shí)例詳解
這篇文章主要介紹了200行代碼實(shí)現(xiàn)blockchain 區(qū)塊鏈的相關(guān)知識,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2018-03-03javascript 就地編輯實(shí)現(xiàn)代碼
最近正在看《javascript設(shè)計(jì)模式》,其中有一個(gè)'就地編輯'的示例,用來表現(xiàn)不同的繼承方式,看完之后想自己憑理解寫一個(gè)類似的東西。2010-05-05JS中的算法與數(shù)據(jù)結(jié)構(gòu)之棧(Stack)實(shí)例詳解
這篇文章主要介紹了JS中的算法與數(shù)據(jù)結(jié)構(gòu)之棧(Stack),結(jié)合實(shí)例形式詳細(xì)分析了js中棧的概念、原理、定義及常見使用方法,需要的朋友可以參考下2019-08-08JavaScript DOM節(jié)點(diǎn)操作方法總結(jié)
下面小編就為大家?guī)硪黄狫avaScript DOM節(jié)點(diǎn)操作方法總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08JavaScript自動內(nèi)存管理與垃圾回收策略詳細(xì)分析講解
JS的垃圾回收機(jī)制是為了以防內(nèi)存泄漏,內(nèi)存泄漏的含義就是當(dāng)已經(jīng)不需要某塊內(nèi)存時(shí)這塊內(nèi)存還存在著,垃圾回收機(jī)制就是間歇的不定期的尋找到不再使用的變量,并釋放掉它們所指向的內(nèi)存。因?yàn)閮?nèi)存的大小是有限的,所以當(dāng)內(nèi)存不再需要的時(shí)候,我們需要對其進(jìn)行釋放2023-01-01原生JS與CSS實(shí)現(xiàn)軟件卸載對話框功能
今天給大家分享一個(gè)特別有意思的軟件卸載對話框功能,本段代碼是基于js 與css實(shí)現(xiàn)的,感興趣的朋友跟隨小編一起看看吧2019-12-12JavaScript實(shí)現(xiàn)多維數(shù)組的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)多維數(shù)組的方法,有需要的朋友可以參考一下2013-11-11