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

資訊專欄INFORMATION COLUMN

JavaScript數(shù)據(jù)類型----原始類型與引用類型(object)詳談

tomlingtm / 1325人閱讀

摘要:做個小小的延伸在這個栗子中,兩個對象都有一條相同的值,但這兩個對象卻不相等,為什么呢因為兩個對象分別引用的是存放在堆內(nèi)存中的個不同的對象,故變量和的值引用地址也是不一樣的。

JavaScript中,有七種內(nèi)置類型:6種原始類型和引用類型,他們分別是:

6種原始類型(基本類型):

空值(null)

未定義(undefined)

布爾值(boolean)

數(shù)字(number)

字符串(string)

符號(symbol,ES6中新增)

引用類型:

對象(object)

類型判斷

我們可以用typeof運算符來查看類型的值:

typeof(undefined)        //"undefined"
typeof("123")            //"string"
typeof(123)              //"number"
typeof(true)             //"boolean"
typeof Symbol()          //"symbol"
typeof({name:"oops"})    //"object"
typeof([1,2,3])          //"object"

我們注意到,null值并不在列,為什么呢?這里比較特殊:

typeof(null)              //"object" ,  這是js中的一個bug

我們應該使用正確的方法來判斷null值的類型:

var a = null;
(!a && typeof a ==="object")  //true

現(xiàn)在讓我們來看另一個問題:什么是undefined?
答案是:變量在未持有值時,變量的類型為undefined。
為什么我會在這里會多帶帶提出這個問題?因為很多開發(fā)人員把undefined等同于undeclared(未聲明),這是一個觀念性的錯誤。已在作用域中聲明的變量但未賦值的,稱為undefined;相反,還未在作用域中聲明的變量,稱為undeclared(未聲明)。
舉個栗子:

var a;
a;   //undefined
c;   //Uncaught ReferenceError: c is not defined

是不是忽然明白了這兩者的差別,BUT!!,請看這個栗子:

var a;
typeof a;     //"undefined"
typeof b;     //"undefined"  

奇怪,變量b未在作用域中聲明,為什么不報錯且typeof的值怎么還是undefined?那是因為typeof的一種特殊的安全機制。利用這點,當我們用if條件語句判斷某個變量是否有值時,可以用這種方法。舉個栗子:

//變量a未聲明,以下方式會報錯
if(a){
  ...
}

//變量a未聲明,以下方式就是安全的
if( typeof a !== "undefined"){
   ...
}

so ,通過typeof檢查undeclared變量是個不錯的方法。

基本類型(原始類型)

js中有六種基本類型,他們是:Undefined、NullBoolean、Number、String、Symbol (new in ES 6),基本類型的儲存方式為棧內(nèi)存(Stack)儲存,下圖所示。

由此得出以下三點結(jié)論;

基本類型的值是不可變的

基本類型的比較是它們的值的比較

基本類型的變量是存放在棧內(nèi)存(Stack)里的

舉個栗子:

var a = "oops";
b = a;
b;               //"oops"
a = "哈哈";
a;               //"哈哈"
b;               //"oops" ,a值的改變不會影響b的值
引用類型

我們先來一個栗子看看引用類型是如何在計算機內(nèi)存儲的:

var a ={};
var b;
a.name = "oops";
a.age = 24;
b = a;
console.log( b.age );      //24
a.name = "hz";
b.age = 18;
console.log( a.age )       //18

從這個例子中可以看出,引用類型的值是保存在堆內(nèi)存(Heap)中的對象,棧內(nèi)存保存變量的指針,堆內(nèi)存中保存具體的對象。

做個小小的延伸:

var a ={name:"hz"};
var b ={name:"hz"};

console.log( a == b );     //false
console.log( a === b );    //false

在這個栗子中,a,b兩個對象都有一條相同的值,但這兩個對象卻不相等,為什么呢?因為
a ,b 兩個對象分別引用的是存放在堆內(nèi)存中的2個不同的對象,故變量 a和 b的值(引用地址)也是不一樣的。

以上。
有錯誤的地方希望大家指出來,共同探討。

參考資料:
【文章】 JavaScript 深入了解基本類型和引用類型的值
【書籍】 你不知道的javascript(中卷) 第一章:類型

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

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

相關(guān)文章

  • JavaScript-如何實現(xiàn)克隆(clone)函數(shù)

    摘要:前提知識在實現(xiàn)克隆函數(shù)之前你需要明白以下一些概念如果你已經(jīng)明白了請直接閱讀實現(xiàn)部分什么是值類型引用類型很多新手可能會對值類型引用類型原始類型基本類型等等名稱感到困惑這里就解釋一下這些概念一個事物是可以有多種區(qū)分形式的比如貓我們可以說它是貓科 前提知識 在實現(xiàn)克隆函數(shù)之前,你需要明白以下一些概念,如果你已經(jīng)明白了,請直接閱讀 實現(xiàn) 部分. 什么是值類型、引用類型? 很多新手可能會對 值類...

    JasonZhang 評論0 收藏0
  • 基礎(chǔ)回顧-javascript數(shù)據(jù)類型

    摘要:棧區(qū)由編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。屬性返回對創(chuàng)建此對象的構(gòu)造函數(shù)的引用。所有的和都是宿主對象參考高級程序設計堆和棧的概念和區(qū)別全面解析中的數(shù)據(jù)類型與類型轉(zhuǎn)換 數(shù)據(jù)類型 數(shù)據(jù)類型劃分 javascript中定義了6中基本數(shù)據(jù)類型(原始值類型),和一種復雜數(shù)據(jù)類型(引用類型),所謂復雜類型,其本質(zhì)是由無序的名值對(key:val...

    codergarden 評論0 收藏0
  • 【基礎(chǔ)系列】javascript數(shù)據(jù)類型原始類型

    摘要:返回布爾值,表示參數(shù)字符串是否在原字符串的頭部。布爾值中布爾值有兩個和和都表示值的空缺,但事從背后更深遠的角度考慮,他們的還是有差別的。首先我們來看一下類型轉(zhuǎn)化表任意的值都可以轉(zhuǎn)換為布爾值,只有會被轉(zhuǎn)換為,其他所有值都會被轉(zhuǎn)換成。 開辟了一個關(guān)于javascript的基礎(chǔ)系列,更加深入、細致的了解這門語言。今天分享的是js的數(shù)據(jù)類型。 javascript的數(shù)據(jù)類型可以分為兩類:原始類...

    aikin 評論0 收藏0
  • JavaScript面向?qū)ο缶纷x書筆記

    摘要:解除引用的最佳手段是將對象變量設置為。字面形式允許你在不需要使用操作符和構(gòu)造函數(shù)顯示創(chuàng)建對象的情況下生成引用值。函數(shù)就是值可以像使用對象一樣使用函數(shù)因為函數(shù)本來就是對象,構(gòu)造函數(shù)更加容易說明。 JavaScript(ES5)的面向?qū)ο缶?標簽: JavaScript 面向?qū)ο?讀書筆記 2016年1月16日-17日兩天看完了《JavaScript面向?qū)ο缶罚▍⒓赢惒缴鐓^(qū)的活動送...

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

    摘要:八進制字面值的第一位必須是,然后是八進制數(shù)字序列。十六進制字面量的前兩位必須是,后跟任何十六進制數(shù)字以及。而自動創(chuàng)建的基本包裝類型的對象,則只存在于一行代碼的執(zhí)行瞬間,然后立即銷毀。 前言 ECMAScript 迄今為止標準定義了 7 種數(shù)據(jù)類型:6 種原始類型-- String、Number、 Boolean、 Undefined、Null 和 Symbol;1 種引用類型-- O...

    szysky 評論0 收藏0

發(fā)表評論

0條評論

tomlingtm

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<