成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript 深入了解基本類型和引用類型的值

Mr_houzi / 1486人閱讀

摘要:原文鏈接一個變量可以存放兩種類型的值,基本類型的值和引用類型的值。引入了一種新的原始數(shù)據(jù)類型,表示獨一無二的值。

原文鏈接

一個變量可以存放兩種類型的值,基本類型的值(primitive values)和引用類型的值(reference values)。

ES6 引入了一種新的原始數(shù)據(jù)類型 Symbol,表示獨一無二的值。它是 JavaScript 語言的第七種數(shù)據(jù)類型,前六種是:Undefined、Null、布爾值(Boolean)、字符串(String)、數(shù)值(Number)、對象(Object)。

基本類型

JavaScript 中共有 6 種基本數(shù)據(jù)類型:UndefinedNull、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ù)類型不同,但是也可以進行值的比較,這是因為在比較之前,自動進行了數(shù)據(jù)類型的 隱式轉(zhuǎ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)識符和變量的值

引用類型

除過上面的 6 種基本數(shù)據(jù)類型外,剩下的就是引用類型了,統(tǒng)稱為 Object 類型。細分的話,有:Object 類型、Array 類型Date 類型、RegExp 類型、Function 類型 等。

引用類型的值是按引用訪問的。

引用類型的值是可變的

var obj = {name:"zyj"};   // 創(chuàng)建一個對象
obj.name = "percy";       // 改變 name 屬性的值
obj.age = 21;             // 添加 age 屬性
obj.giveMeAll = function(){
  return this.name + " : " + this.age;
};                        // 添加 giveMeAll 方法
obj.giveMeAll();

引用類型的比較是引用的比較

var obj1 = {};    // 新建一個空對象 obj1
var obj2 = {};    // 新建一個空對象 obj2
console.log(obj1 == obj2);    // false
console.log(obj1 === obj2);   // false

因為 obj1 和 obj2 分別引用的是存放在堆內(nèi)存中的2個不同的對象,故變量 obj1 和 obj2 的值(引用地址)也是不一樣的!

引用類型的值是保存在堆內(nèi)存(Heap)中的對象(Object)
與其他編程語言不同,JavaScript 不能直接操作對象的內(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)識符和指向堆內(nèi)存中該對象的指針

堆內(nèi)存中保存了對象的內(nèi)容

檢測類型

typeof:經(jīng)常用來檢測一個變量是不是最基本的數(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òu)造函數(shù)的 prototype 屬性所指向的對象是否存在于另外一個要檢測對象的原型鏈上

簡單說就是判斷一個引用類型的變量具體是不是某種類型的對象

({}) instanceof Object              // true
([]) instanceof Array               // true
(/aa/g) instanceof RegExp           // true
(function(){}) instanceof Function  // true

更詳細的類型檢測請看參考資料!

有錯誤的地方,歡迎大家指出來!

參考資料

【文章】[ JS 進階 ] 基本類型 引用類型 簡單賦值 對象引用(推薦)

【Stack Overflow】Javascript by reference vs. by value

【文章】[[JS] 讓人犯暈的JavaScript變量賦值](http://hellobug.github.io/blo...

【文章】如何檢查JavaScript變量類型?(推薦)

【文章】Stack的三種含義

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80238.html

相關(guān)文章

  • 【進階1-3期】JavaScript深入之內(nèi)存空間詳細圖解

    摘要:進階期理解中的執(zhí)行上下文和執(zhí)行棧進階期深入之執(zhí)行上下文棧和變量對象但是今天補充一個知識點某些情況下,調(diào)用堆棧中函數(shù)調(diào)用的數(shù)量超出了調(diào)用堆棧的實際大小,瀏覽器會拋出一個錯誤終止運行。 (關(guān)注福利,關(guān)注本公眾號回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實戰(zhàn)、面試指導(dǎo)) 本周正式開始前端進階的第一期,本周的主題是調(diào)用堆棧,今天是第3天。 本計劃一共28期,每期重點攻...

    coordinate35 評論0 收藏0
  • JavaScript數(shù)據(jù)類型----原始類型引用類型(object)詳談

    摘要:做個小小的延伸在這個栗子中,兩個對象都有一條相同的值,但這兩個對象卻不相等,為什么呢因為兩個對象分別引用的是存放在堆內(nèi)存中的個不同的對象,故變量和的值引用地址也是不一樣的。 JavaScript中,有七種內(nèi)置類型:6種原始類型和引用類型,他們分別是: 6種原始類型(基本類型): 空值(null) 未定義(undefined) 布爾值(boolean) 數(shù)字(number) 字符串(s...

    tomlingtm 評論0 收藏0
  • 深入理解 JavaScript中的變量、值、傳參

    摘要:所以說在中,也并不是一切都是對象原始類型值不可變原始類型的變量的值是不可變的,只能給變量賦予新的值??梢岳斫饣绢愋偷淖兞康闹?,就是字面上寫的數(shù)值。有四個變量圖調(diào)用是傳參,內(nèi)層的會屏蔽外層的。圖內(nèi)層的的值被改變成的值被改變?yōu)椤? showImg(https://segmentfault.com/img/bVbldfK); 1. demo 如果你對下面的代碼沒有任何疑問就能自信的回答出輸出...

    endiat 評論0 收藏0
  • JavaScript的數(shù)據(jù)類型(四)

    摘要:目錄基本類型和引用類型檢測數(shù)據(jù)類型的方法數(shù)據(jù)類型的轉(zhuǎn)換通用庫的初步創(chuàng)建與對象的深淺拷貝小結(jié)從前面三篇文章,我們已經(jīng)大致了解的基本語法中的數(shù)據(jù)類型數(shù)值型字符串布爾型對象數(shù)組函數(shù)和這篇文章將深入探討這幾種數(shù)據(jù)類型在內(nèi)存中的存儲方式讀取方式和拷貝 目錄 1. 基本類型和引用類型 2. 檢測數(shù)據(jù)類型的方法 3. 數(shù)據(jù)類型的轉(zhuǎn)換 4. 通用庫的初步創(chuàng)建與對象的深淺拷貝 5. 小結(jié) 從前面三篇文...

    didikee 評論0 收藏0
  • 【進階1-5期】JavaScript深入之4類常見內(nèi)存泄漏及如何避免

    摘要:本期推薦文章類內(nèi)存泄漏及如何避免,由于微信不能訪問外鏈,點擊閱讀原文就可以啦。四種常見的內(nèi)存泄漏劃重點這是個考點意外的全局變量未定義的變量會在全局對象創(chuàng)建一個新變量,如下。因為老版本的是無法檢測節(jié)點與代碼之間的循環(huán)引用,會導(dǎo)致內(nèi)存泄漏。 (關(guān)注福利,關(guān)注本公眾號回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實戰(zhàn)、面試指導(dǎo)) 本周正式開始前端進階的第一期,本周的主題...

    red_bricks 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<