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

資訊專(zhuān)欄INFORMATION COLUMN

js的基本類(lèi)型、引用類(lèi)型、包裝類(lèi)型

liangzai_cool / 2496人閱讀

摘要:每當(dāng)讀取這個(gè)基本類(lèi)型時(shí),后臺(tái)會(huì)創(chuàng)建一個(gè)對(duì)應(yīng)的基本包裝類(lèi)型的對(duì)象。類(lèi)型判斷主要是用來(lái)判斷基本數(shù)據(jù)類(lèi)型返回類(lèi)型新增所以只能用來(lái)判斷基本數(shù)據(jù)類(lèi)型。引用類(lèi)型基本包裝類(lèi)型都會(huì)返回。

最近重溫JS高程設(shè)計(jì)以及與朋友的討論。決定趁熱打鐵記錄JS的各種類(lèi)型,并做下深入總結(jié)。

js的幾種類(lèi)型

基本類(lèi)型:Boolean、String、Number、Null、Undefined

引用類(lèi)型:
2.1 Object、Array、Date、RegExp等
2.2 基本包裝類(lèi)型:Boolean、String、Number

基本類(lèi)型

就是我們平常用來(lái)做簡(jiǎn)單賦值的類(lèi)型。這種數(shù)據(jù)類(lèi)型是存在棧中以值得形式存在,賦值時(shí)也是直接進(jìn)行值傳遞

引用類(lèi)型

是高級(jí)的類(lèi)型,可以添加方法和熟悉等。真正的數(shù)據(jù)存在堆中,賦值時(shí)是進(jìn)行址傳遞

    //舉個(gè)例子
    var a = [3,4,5];
    var b = a;//賦值的是 存儲(chǔ) a變量的地址。這時(shí)候a、b指向同一片內(nèi)存區(qū)域
    b[0] = 9;//改變內(nèi)存區(qū)域中的值 a的值也進(jìn)行更改
    console.log(a);//[9,4,5]
基本包裝類(lèi)型介紹

我們都知道只有引用類(lèi)型才能添加、調(diào)用屬性和方法,那為什么基本類(lèi)型Boolean、String、Number能調(diào)用方法?按說(shuō)它是沒(méi)有方法才對(duì)呀!這是因?yàn)镋CMAScript提供了三個(gè)特殊的包裝類(lèi)型:Boolean、String、Number。每當(dāng)讀取這個(gè)基本類(lèi)型時(shí),后臺(tái)會(huì)創(chuàng)建一個(gè)對(duì)應(yīng)的基本包裝類(lèi)型的對(duì)象。使得可以操作這個(gè)基本類(lèi)型了。

當(dāng)我們?cè)趦?nèi)存中讀取基本類(lèi)型時(shí),后臺(tái)會(huì)做以下操作:
1.創(chuàng)建對(duì)應(yīng)包裝類(lèi)型(Boolean、String、Number)的實(shí)例
2.在實(shí)例上調(diào)用對(duì)應(yīng)的方法
3.銷(xiāo)毀這個(gè)實(shí)例
    //舉個(gè)實(shí)際操作的例子  
    var str = "have a good time";
    var str2 = str.charAt(0);//h;
    str.color = "red";
    console.log(str.color);//undefined

這是因?yàn)橐妙?lèi)型和基本包裝類(lèi)型的生存期不一樣。引用類(lèi)型在執(zhí)行流離開(kāi)當(dāng)前作用域時(shí)一直存在內(nèi)存中。自動(dòng)創(chuàng)建的基本包裝類(lèi)型的對(duì)象,只存在于執(zhí)行這一行代碼的一瞬間,執(zhí)行完立馬被銷(xiāo)毀了。這就是為什么我們給str.color添加對(duì)象時(shí)打印出來(lái)為undefined。因?yàn)樵趫?zhí)行完str的color這一行代碼時(shí),自動(dòng)創(chuàng)建的包裝類(lèi)型對(duì)象被銷(xiāo)毀了。下面console出來(lái)的str是新創(chuàng)建的String對(duì)象,沒(méi)有color這個(gè)屬性。

js類(lèi)型判斷

typeof 主要是用來(lái)判斷基本數(shù)據(jù)類(lèi)型

//返回類(lèi)型: string、number、boolean、object、undefined、function、Symbol(ES6新增)
typeof 123; // "number"
typeof "cherry";// "string"
typeof false; //"boolean"
typeof undefined; //"undefined"
typeof null; // "object"
typeof {name:"cherry"};//"object"
var fun = function(){};
typeof fun; //"function"
typeof new String("xxx");//"object"
  

所以typeof只能用來(lái)判斷基本數(shù)據(jù)類(lèi)型。null、引用類(lèi)型、基本包裝類(lèi)型都會(huì)返回object。

instanceof 用法:A instanceof B,主要是判斷A是否是某個(gè)對(duì)象的實(shí)例,簡(jiǎn)單來(lái)說(shuō)就是A的原型鏈上(__proto__)是否有B的原型對(duì)象(prototype)。

// 例子
var obj= {"name":"cherry"};
obj instanceof Object; //true

var strObj = new String("hello");
strObj instanceof String;//true

var str = "hello";
str instanceof String;//false
//判斷的原理 就是計(jì)算逐級(jí)計(jì)算左邊對(duì)象的__proto__是否等于右邊對(duì)象的prototype即可
function instance(left,right){
    var obj = right.prototype;
    var left = left.__proto__;
    while(true){
        if(left === null){
            return false;
        }
        if(left == obj){
            return true;
        }
        left = left.__proto__;
    }
}

Object.prototype.toString.call()(點(diǎn)擊看此方法具體原理)
Object.toString()返回對(duì)象的字符串表示。但是由于數(shù)值、布爾、字符串、數(shù)組都有重寫(xiě)toString方法,直接調(diào)用的時(shí)候使用的是自身原型對(duì)象上有toString方法則不會(huì)往上去找Object的toString方法。這里強(qiáng)制使用Object原型對(duì)象上的toString方法。

Object.prototype.toString.call("123");//[object String]
var objStr = new String("123");//包裝類(lèi)型檢測(cè)出來(lái)也是對(duì)應(yīng)類(lèi)型而不是對(duì)象
Object.prototype.toString.call(objStr);//[object String]
Object.prototype.toString.call(123);//[object Number]
Object.prototype.toString.call(true);//[object Boolean]
Object.prototype.toString.call(null);//[object Null]
Object.prototype.toString.call(undefined);//[object Undefined]
var obj = {"name":"cherry"};
Object.prototype.toString.call(obj);//[object Object]
var arr = [1,2,3];
Object.prototype.toString.call(arr);//[object Array]

總結(jié):使用Object的toString(),可以檢測(cè)出各值的類(lèi)型?;緮?shù)據(jù)類(lèi)型和基本包裝類(lèi)型返回的值是一樣。所以不用擔(dān)心別人是通過(guò)基本包裝類(lèi)型定義的變量(面試時(shí)被問(wèn)過(guò))



面試題:判斷一個(gè)值的數(shù)據(jù)類(lèi)型

function valueType(data){
    var type = null;
    var typeList = ["Object","Number","Boolean","String","Function","Object","Null","Undefined"];
    for(var item of typeList){
        if(Object.prototype.toString.call(str) == `[object ${item}]`){
            type = item;
            break;
        }
    }
    return type;
}

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

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

相關(guān)文章

  • js基本類(lèi)型,引用類(lèi)型,基本包裝類(lèi)型

    摘要:基本類(lèi)型引用類(lèi)型等,說(shuō)白了就是對(duì)象。。?;景b類(lèi)型如下基本類(lèi)型毫無(wú)疑問(wèn)上面的是一個(gè)基本類(lèi)型,但是它卻能召喚出一個(gè)的方法,這是什么原因呢主要是因?yàn)樵诨绢?lèi)型中,有三個(gè)比較特殊的存在就是,這三個(gè)基本類(lèi)型都有自己對(duì)應(yīng)的包裝對(duì)象。 基本類(lèi)型:Undefined,Null,Boolean,Number,String 引用類(lèi)型:Object,Array,Date,RegExp等,說(shuō)白了就是對(duì)象。...

    kun_jian 評(píng)論0 收藏0
  • JS中,基本數(shù)據(jù)類(lèi)型引用類(lèi)型基本包裝類(lèi)型

    摘要:例子中,屬于基本類(lèi)型對(duì)象?;緮?shù)據(jù)類(lèi)型和引用類(lèi)型作方法入?yún)r(shí)的差異通常,在函數(shù)調(diào)用時(shí),如果入?yún)榛緮?shù)據(jù)類(lèi)型時(shí),函數(shù)的參數(shù)將以值傳遞的方式傳遞。 前言:再次翻閱JS高程(第3版)過(guò)程中,看到了基本包裝類(lèi)型,趁熱留下此文,對(duì)JS的數(shù)據(jù)類(lèi)型做個(gè)較為深入的小結(jié)(2018-10-19)。 雖然JS與其他強(qiáng)類(lèi)型語(yǔ)言不一樣,聲明中無(wú)需預(yù)設(shè)數(shù)據(jù)類(lèi)型,但是JS也是有數(shù)據(jù)類(lèi)型區(qū)分的。 基本數(shù)據(jù)類(lèi)型(...

    Tychio 評(píng)論0 收藏0
  • 輕松理解JS基本包裝對(duì)象

    摘要:今天來(lái)討論一下中的基本包裝對(duì)象也叫基本包裝類(lèi)型,之前剛學(xué)到這里的時(shí)候,自己也是一頭霧水,不明白這個(gè)基本包裝對(duì)象到底是個(gè)什么鬼,后來(lái)找了很多資料,終于看清了它的真面目?;绢?lèi)型引用類(lèi)型等,說(shuō)白了就是對(duì)象。。。 今天來(lái)討論一下JS中的基本包裝對(duì)象(也叫基本包裝類(lèi)型),之前剛學(xué)到這里的時(shí)候,自己也是一頭霧水,不明白這個(gè)基本包裝對(duì)象到底是個(gè)什么鬼,后來(lái)找了很多資料,終于看清了它的真面目。首先呢...

    seal_de 評(píng)論0 收藏0
  • js數(shù)據(jù)類(lèi)型

    摘要:來(lái)自你不知道的對(duì)未初始化和未聲明的變量執(zhí)行操作符都返回了值類(lèi)型是第二個(gè)只有一個(gè)值的數(shù)據(jù)類(lèi)型,這個(gè)特殊的值是。 基本類(lèi)型 主要有:undefined、null、布爾值(Boolean)、字符串(String)、數(shù)值(Number)、Symbol undefined 在使用 var,let,const 聲明變量但未對(duì)其加以初始化時(shí),這個(gè)變量的值就是undefined 注意點(diǎn): ...

    Jensen 評(píng)論0 收藏0
  • JS中數(shù)據(jù)類(lèi)型、內(nèi)置對(duì)象、包裝類(lèi)型對(duì)象、typeof關(guān)系

    摘要:平時(shí)在復(fù)習(xí)基礎(chǔ)知識(shí)時(shí),經(jīng)常會(huì)遇到數(shù)據(jù)類(lèi)型基礎(chǔ)數(shù)據(jù)類(lèi)型內(nèi)置對(duì)象包裝類(lèi)型對(duì)象,檢測(cè)數(shù)據(jù)類(lèi)型時(shí),用到的值,感覺(jué)都差不多,但是又有差異。值與數(shù)據(jù)類(lèi)型關(guān)系對(duì)比下圖,即可知值相較于基礎(chǔ)數(shù)據(jù)類(lèi)型少多 平時(shí)在復(fù)習(xí)JS基礎(chǔ)知識(shí)時(shí),經(jīng)常會(huì)遇到JS數(shù)據(jù)類(lèi)型、基礎(chǔ)數(shù)據(jù)類(lèi)型、內(nèi)置對(duì)象、包裝類(lèi)型對(duì)象,檢測(cè)數(shù)據(jù)類(lèi)型時(shí),用到的typeof值,感覺(jué)都差不多,但是又有差異。今天特地整理下,方便理解。 JS數(shù)據(jù)類(lèi)型 基礎(chǔ)數(shù)...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<