成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

tomlingtm / 1372人閱讀

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

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

6種原始類(lèi)型(基本類(lèi)型):

空值(null)

未定義(undefined)

布爾值(boolean)

數(shù)字(number)

字符串(string)

符號(hào)(symbol,ES6中新增)

引用類(lèi)型:

對(duì)象(object)

類(lèi)型判斷

我們可以用typeof運(yùn)算符來(lái)查看類(lèi)型的值:

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中的一個(gè)bug

我們應(yīng)該使用正確的方法來(lái)判斷null值的類(lèi)型:

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

現(xiàn)在讓我們來(lái)看另一個(gè)問(wèn)題:什么是undefined?
答案是:變量在未持有值時(shí),變量的類(lèi)型為undefined。
為什么我會(huì)在這里會(huì)多帶帶提出這個(gè)問(wèn)題?因?yàn)楹芏嚅_(kāi)發(fā)人員把undefined等同于undeclared(未聲明),這是一個(gè)觀念性的錯(cuò)誤。已在作用域中聲明的變量但未賦值的,稱為undefined;相反,還未在作用域中聲明的變量,稱為undeclared(未聲明)。
舉個(gè)栗子:

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

是不是忽然明白了這兩者的差別,BUT!!,請(qǐng)看這個(gè)栗子:

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

奇怪,變量b未在作用域中聲明,為什么不報(bào)錯(cuò)且typeof的值怎么還是undefined?那是因?yàn)閠ypeof的一種特殊的安全機(jī)制。利用這點(diǎn),當(dāng)我們用if條件語(yǔ)句判斷某個(gè)變量是否有值時(shí),可以用這種方法。舉個(gè)栗子:

//變量a未聲明,以下方式會(huì)報(bào)錯(cuò)
if(a){
  ...
}

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

so ,通過(guò)typeof檢查undeclared變量是個(gè)不錯(cuò)的方法。

基本類(lèi)型(原始類(lèi)型)

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

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

基本類(lèi)型的值是不可變的

基本類(lèi)型的比較是它們的值的比較

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

舉個(gè)栗子:

var a = "oops";
b = a;
b;               //"oops"
a = "哈哈";
a;               //"哈哈"
b;               //"oops" ,a值的改變不會(huì)影響b的值
引用類(lèi)型

我們先來(lái)一個(gè)栗子看看引用類(lèi)型是如何在計(jì)算機(jī)內(nèi)存儲(chǔ)的:

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

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

做個(gè)小小的延伸:

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

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

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

以上。
有錯(cuò)誤的地方希望大家指出來(lái),共同探討。

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/99614.html

相關(guān)文章

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

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

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

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

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

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

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

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

    GitCafe 評(píng)論0 收藏0
  • JavaScript中的數(shù)據(jù)類(lèi)型

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

    szysky 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<