摘要:原文鏈接一個(gè)變量可以存放兩種類型的值,基本類型的值和引用類型的值。引入了一種新的原始數(shù)據(jù)類型,表示獨(dú)一無二的值。
原文鏈接
一個(gè)變量可以存放兩種類型的值,基本類型的值(primitive values)和引用類型的值(reference values)。
ES6 引入了一種新的原始數(shù)據(jù)類型 Symbol,表示獨(dú)一無二的值。它是 JavaScript 語言的第七種數(shù)據(jù)類型,前六種是:Undefined、Null、布爾值(Boolean)、字符串(String)、數(shù)值(Number)、對(duì)象(Object)。
基本類型JavaScript 中共有 6 種基本數(shù)據(jù)類型:Undefined、Null、Boolean、Number、String、Symbol (new in ES 6) !
約定:基本數(shù)據(jù)類型與原始數(shù)據(jù)類型等意。
基本數(shù)據(jù)類型的值是按值訪問的。
基本類型的值是不可變的
var str = "123hello321"; str.toUpperCase(); // 123HELLO321 console.log(str); // 123hello321
基本類型的比較是它們的值的比較
var a = 1; var b = true; console.log(a == b); // true console.log(a === b); // false
上面 a 和 b 的數(shù)據(jù)類型不同,但是也可以進(jìn)行值的比較,這是因?yàn)樵诒容^之前,自動(dòng)進(jìn)行了數(shù)據(jù)類型的 隱式轉(zhuǎn)換。
== : 只進(jìn)行值的比較
=== : 不僅進(jìn)行值得比較,還要進(jìn)行數(shù)據(jù)類型的比較
基本類型的變量是存放在棧內(nèi)存(Stack)里的
var a,b; a = "zyj"; b = a; console.log(a); // zyj console.log(b); // zyj a = "呵呵"; // 改變 a 的值,并不影響 b 的值 console.log(a); // 呵呵 console.log(b); // zyj
圖解如下:棧內(nèi)存中包括了變量的標(biāo)識(shí)符和變量的值
引用類型除過上面的 6 種基本數(shù)據(jù)類型外,剩下的就是引用類型了,統(tǒng)稱為 Object 類型。細(xì)分的話,有:Object 類型、Array 類型、Date 類型、RegExp 類型、Function 類型 等。
引用類型的值是按引用訪問的。
引用類型的值是可變的
var obj = {name:"zyj"}; // 創(chuàng)建一個(gè)對(duì)象 obj.name = "percy"; // 改變 name 屬性的值 obj.age = 21; // 添加 age 屬性 obj.giveMeAll = function(){ return this.name + " : " + this.age; }; // 添加 giveMeAll 方法 obj.giveMeAll();
引用類型的比較是引用的比較
var obj1 = {}; // 新建一個(gè)空對(duì)象 obj1 var obj2 = {}; // 新建一個(gè)空對(duì)象 obj2 console.log(obj1 == obj2); // false console.log(obj1 === obj2); // false
因?yàn)?obj1 和 obj2 分別引用的是存放在堆內(nèi)存中的2個(gè)不同的對(duì)象,故變量 obj1 和 obj2 的值(引用地址)也是不一樣的!
引用類型的值是保存在堆內(nèi)存(Heap)中的對(duì)象(Object)
與其他編程語言不同,JavaScript 不能直接操作對(duì)象的內(nèi)存空間(堆內(nèi)存)。
var a = {name:"percy"}; var b; b = a; a.name = "zyj"; console.log(b.name); // zyj b.age = 22; console.log(a.age); // 22 var c = { name: "zyj", age: 22 };
圖解如下:
棧內(nèi)存中保存了變量標(biāo)識(shí)符和指向堆內(nèi)存中該對(duì)象的指針
堆內(nèi)存中保存了對(duì)象的內(nèi)容
檢測(cè)類型
typeof:經(jīng)常用來檢測(cè)一個(gè)變量是不是最基本的數(shù)據(jù)類型
var a; typeof a; // undefined a = null; typeof a; // object a = true; typeof a; // boolean a = 666; typeof a; // number a = "hello"; typeof a; // string a = Symbol(); typeof a; // symbol a = function(){} typeof a; // function a = []; typeof a; // object a = {}; typeof a; // object a = /aaa/g; typeof a; // object
instanceof:用來判斷某個(gè)構(gòu)造函數(shù)的 prototype 屬性所指向的對(duì)象是否存在于另外一個(gè)要檢測(cè)對(duì)象的原型鏈上
簡(jiǎn)單說就是判斷一個(gè)引用類型的變量具體是不是某種類型的對(duì)象
({}) instanceof Object // true ([]) instanceof Array // true (/aa/g) instanceof RegExp // true (function(){}) instanceof Function // true
更詳細(xì)的類型檢測(cè)請(qǐng)看參考資料!
有錯(cuò)誤的地方,歡迎大家指出來!
參考資料【文章】[ JS 進(jìn)階 ] 基本類型 引用類型 簡(jiǎn)單賦值 對(duì)象引用(推薦)
【Stack Overflow】Javascript by reference vs. by value
【文章】[[JS] 讓人犯暈的JavaScript變量賦值](http://hellobug.github.io/blo...
【文章】如何檢查JavaScript變量類型?(推薦)
【文章】Stack的三種含義
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/80238.html
摘要:進(jìn)階期理解中的執(zhí)行上下文和執(zhí)行棧進(jìn)階期深入之執(zhí)行上下文棧和變量對(duì)象但是今天補(bǔ)充一個(gè)知識(shí)點(diǎn)某些情況下,調(diào)用堆棧中函數(shù)調(diào)用的數(shù)量超出了調(diào)用堆棧的實(shí)際大小,瀏覽器會(huì)拋出一個(gè)錯(cuò)誤終止運(yùn)行。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周正式開始前端進(jìn)階的第一期,本周的主題是調(diào)用堆棧,今天是第3天。 本計(jì)劃一共28期,每期重點(diǎn)攻...
摘要:做個(gè)小小的延伸在這個(gè)栗子中,兩個(gè)對(duì)象都有一條相同的值,但這兩個(gè)對(duì)象卻不相等,為什么呢因?yàn)閮蓚€(gè)對(duì)象分別引用的是存放在堆內(nèi)存中的個(gè)不同的對(duì)象,故變量和的值引用地址也是不一樣的。 JavaScript中,有七種內(nèi)置類型:6種原始類型和引用類型,他們分別是: 6種原始類型(基本類型): 空值(null) 未定義(undefined) 布爾值(boolean) 數(shù)字(number) 字符串(s...
摘要:所以說在中,也并不是一切都是對(duì)象原始類型值不可變?cè)碱愋偷淖兞康闹凳遣豢勺兊模荒芙o變量賦予新的值。可以理解基本類型的變量的值,就是字面上寫的數(shù)值。有四個(gè)變量圖調(diào)用是傳參,內(nèi)層的會(huì)屏蔽外層的。圖內(nèi)層的的值被改變成的值被改變?yōu)椤? showImg(https://segmentfault.com/img/bVbldfK); 1. demo 如果你對(duì)下面的代碼沒有任何疑問就能自信的回答出輸出...
摘要:目錄基本類型和引用類型檢測(cè)數(shù)據(jù)類型的方法數(shù)據(jù)類型的轉(zhuǎn)換通用庫的初步創(chuàng)建與對(duì)象的深淺拷貝小結(jié)從前面三篇文章,我們已經(jīng)大致了解的基本語法中的數(shù)據(jù)類型數(shù)值型字符串布爾型對(duì)象數(shù)組函數(shù)和這篇文章將深入探討這幾種數(shù)據(jù)類型在內(nèi)存中的存儲(chǔ)方式讀取方式和拷貝 目錄 1. 基本類型和引用類型 2. 檢測(cè)數(shù)據(jù)類型的方法 3. 數(shù)據(jù)類型的轉(zhuǎn)換 4. 通用庫的初步創(chuàng)建與對(duì)象的深淺拷貝 5. 小結(jié) 從前面三篇文...
摘要:本期推薦文章類內(nèi)存泄漏及如何避免,由于微信不能訪問外鏈,點(diǎn)擊閱讀原文就可以啦。四種常見的內(nèi)存泄漏劃重點(diǎn)這是個(gè)考點(diǎn)意外的全局變量未定義的變量會(huì)在全局對(duì)象創(chuàng)建一個(gè)新變量,如下。因?yàn)槔习姹镜氖菬o法檢測(cè)節(jié)點(diǎn)與代碼之間的循環(huán)引用,會(huì)導(dǎo)致內(nèi)存泄漏。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周正式開始前端進(jìn)階的第一期,本周的主題...
閱讀 851·2021-11-15 17:58
閱讀 3652·2021-11-12 10:36
閱讀 3788·2021-09-22 16:06
閱讀 965·2021-09-10 10:50
閱讀 1332·2019-08-30 11:19
閱讀 3315·2019-08-29 16:26
閱讀 936·2019-08-29 10:55
閱讀 3347·2019-08-26 13:48