javascript七种数据类型详解 深入了解基本类型和引用类型的值
本文轉(zhuǎn)自:原文鏈接????????????作者:percy507
一個(gè)變量可以存放兩種類型的值,基本類型的值(primitive values)和引用類型的值(reference values)。
ES6 引入了一種新的原始數(shù)據(jù)類型 Symbol,表示獨(dú)一無(wú)二的值。它是 JavaScript 語(yǔ)言的第七種數(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)
與其他編程語(yǔ)言不同,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
- 簡(jiǎn)單說就是判斷一個(gè)引用類型的變量具體是不是某種類型的對(duì)象
更詳細(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的三種含義
總結(jié)
以上是生活随笔為你收集整理的javascript七种数据类型详解 深入了解基本类型和引用类型的值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript中this.inde
- 下一篇: JS的{} + {}与{} + []的结