面向?qū)ο?4

Array.isArray()方法

作用:判斷某個對象是否是數(shù)組
語法:Array.isArray(對象),返回值為布爾值

注意點:兼容性問題(ES5)

面試題

    var o = {};
    var a ={};
    var b = {name:"張三"};

    o["a"] = "Test-a";
    o["b"] = "Test-b";
    o[b] = "Demo-b";
    o[a] = "Demo-a";

    console.log(o.a);      //  Test-a
    console.log(o.b);      //  Test-b
    console.log(o[a]);     //  Demo-a
    console.log(o[b]);     //  Demo-a
    console.log(o["a"]);   // Test-a
    console.log(o["b"]);   //  Test-b

    var arr1= [1,2,3];
    console.log( arr1.toString());  //字符串類型的1,2,3
    var func = function () {

    };

    console.log(typeof func.toString()); //string
    console.log(a.toString());   //[object Object]  [類型 構(gòu)造函數(shù)]
    console.log(b.toString());  //[object Object] 
    console.log(o);
 當(dāng)使用[]訪問屬性的時候郁副,屬性是字符串锣夹,如果屬性不是字符串页徐,會將    屬性當(dāng)做變量來處理,當(dāng)變量的值為數(shù)組银萍,會將數(shù)組的值轉(zhuǎn)換成字符串樣式变勇;當(dāng)變量的值為函數(shù),會將函數(shù)轉(zhuǎn)換成字符串樣式的函數(shù)贴唇;當(dāng)變量為對象搀绣,會將對象的值都轉(zhuǎn)換為[object Object] 的字符串,以上皆默認(rèn)使用toString方法

在使用[]語法設(shè)置對象的時候:

  • []中存放的是字符串戳气,那么這個字符串就直接作為key
  • []中存放的不是字符串链患,那么就把[]中部分當(dāng)成一個變量來處理,查找最近變量瓶您,獲取其值麻捻,如果對應(yīng)的值是字符串,那么就直接作為key;如果對應(yīng)的值是對象呀袱,那么就嘗試把這個對象轉(zhuǎn)換為字符串(toString)

toString:
返回的是對當(dāng)前對象的字符串描述贸毕。

Array.isArray()方法兼容性問題

思路:根據(jù)上述面試題,能否借用Object的原型對象上的toString方法將數(shù)組轉(zhuǎn)換成[object Array] 夜赵,由此來判斷是否是數(shù)組

代碼示例

    var arr1 = [1,2,3];
    console.log(Object.prototype.toString.call(arr1));   //[object Array]
    var date = new Date();
    console.log(typeof date);         //[object Date]
    console.log(Object.prototype.toString.call(function () {
        
    }));                               //[object Function]
    //由以上代碼執(zhí)行的結(jié)果可以判斷明棍,借用Object的原型對象上的toString方法可以將對象轉(zhuǎn)換成[object 構(gòu)造函數(shù)]的字符串形式,從中可以觀察到對象的構(gòu)造函數(shù) 油吭,進(jìn)而我們可以通過這個方法來判斷是否是數(shù)組
    if (typeof Array.isArray 击蹲!=‘function’){

    Array.isArray=function(arr){
    return Object.prototype.toString.call(arr)=='[object Array] ';
      }

    }

instanceOf補(bǔ)充

作用:
01 檢查某個對象是否由某個構(gòu)造函數(shù)創(chuàng)建出來的署拟;
02 檢查該對象的構(gòu)造函數(shù)的原型對象是否在該對象的原型鏈上;

代碼示例

    function Person() {

    }

    var p1 = new Person();
    console.log(p1 instanceof Person);  //true
    Person.prototype = {};      //原型對象被替換歌豺,
    console.log(p1 instanceof Person);  //false

基本包裝類型

  • String
  • Number
  • Boolean

基本包裝類型創(chuàng)建對象

  • new String/Number/Boolean()
  • new Object('字符串' | 數(shù)值 | 布爾類型的值)
  • Object('字符串' | 數(shù)值 | 布爾類型的值)
    注意:new Object()與Object()會根據(jù)傳入的參數(shù)推穷,內(nèi)部會做一個判斷來創(chuàng)建字符串對象/數(shù)值對象/布爾類型的對象

注意:通過構(gòu)造函數(shù)()方法創(chuàng)建的不是對象,是基本數(shù)據(jù)類型的值(除了Object)

  var str1 = new String("demo01");
    var str2 = "demo01";
    var str3 = new Object("demo01");
    var str4 = Object("demo01");
    var str5 = String("demo01");  //字符串還是字符串對象类咧?注意馒铃,通過構(gòu)造函數(shù)()方法創(chuàng)建的不是對象,是基本數(shù)據(jù)類型的值

    console.log(typeof str1, typeof str2,typeof str3,typeof str4); //
    console.log(typeof str5);    //string

    var num1 = new Number(1);
    var num2 = 1;
    var num3 = new Object(1);
    console.log(typeof num1, typeof num2,typeof  num3);

    var bool1 = new Boolean(true);
    console.log(bool1);
    var bool2 = true;
    console.log(typeof bool1, typeof bool2);

基本包裝類型注意點

  • 比較痕惋,等于與全等于
    var str1 = new String("demo01");  //ox11
    var str2 = "demo01";
    var str3 = new Object("demo01");  //0x22
    var str4 = Object("demo01");
    var str5 = String("demo01");  //字符串還是字符串對象区宇?
    var str6 = "demo01";

    console.log(str2 == str6); //true  兩個都是基本類型的值在比較的時候比較內(nèi)容(demo01)
    console.log(str1 == str2); //true  類型不一樣,內(nèi)部有隱式的轉(zhuǎn)換(對象.valueOf)
    console.log(str1 == str3); //false,存儲的內(nèi)容是地址
  • 基本類型的數(shù)據(jù)也可以訪問屬性和方法
var str01 = "string01";
    console.log(str01.length);   //8
    //var tmp = new String(str01);
    //tmp.length  ==>8
    //tmp = null;

    console.log(str01.substr(1, 2)); //tr
    var str02 = new String("sting02");
    str02.name = "默認(rèn)的name";
    console.log(str02.name);   //默認(rèn)的name

    str01.name = "測試的名稱";
    console.log(str01.name);  //undefined

實際上值戳,每當(dāng)讀取一個基本數(shù)據(jù)類型的值议谷,后臺就會創(chuàng)建一個對應(yīng)基本包裝類型的對象,從而能夠使基本數(shù)據(jù)調(diào)用一些方法堕虹。

引用類型與基本包裝類型的主要區(qū)別就在于對象的生命周期卧晓,使用new操作符創(chuàng)建的引用類型的實例,在執(zhí)行流離開當(dāng)前作用域之前都一直保存在內(nèi)存中赴捞。而自動創(chuàng)建的基本包裝類型的對象逼裆,只存在于這一行代碼的執(zhí)行期(瞬間),然后立即銷毀赦政。這就意味著我們不能在運(yùn)行時為基本數(shù)據(jù)類型添加屬性和方法胜宇。

Number使用注意

<script>
    Number.prototype.sum = function (n) {
        return n + this;
    };

    var num1 = new Number(10);
    console.log(num1.sum(20));        //30

    var num2 = 11;
    console.log(num2.sum(10));        //21
//    console.log(10.sum(5));    //不可以這樣調(diào)用
    console.log((10).sum(5));    //這樣是可以的 15       表達(dá)式 加上一個()
</script>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市恢着,隨后出現(xiàn)的幾起案子桐愉,更是在濱河造成了極大的恐慌,老刑警劉巖掰派,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仅财,死亡現(xiàn)場離奇詭異,居然都是意外死亡碗淌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門抖锥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亿眠,“玉大人,你說我怎么就攤上這事磅废∧上瘢” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵拯勉,是天一觀的道長竟趾。 經(jīng)常有香客問我憔购,道長,這世上最難降的妖魔是什么岔帽? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任玫鸟,我火速辦了婚禮,結(jié)果婚禮上犀勒,老公的妹妹穿的比我還像新娘屎飘。我一直安慰自己,他們只是感情好贾费,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布钦购。 她就那樣靜靜地躺著,像睡著了一般褂萧。 火紅的嫁衣襯著肌膚如雪押桃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天导犹,我揣著相機(jī)與錄音唱凯,去河邊找鬼。 笑死锡足,一個胖子當(dāng)著我的面吹牛波丰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舶得,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼掰烟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沐批?” 一聲冷哼從身側(cè)響起纫骑,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎九孩,沒想到半個月后先馆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡躺彬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年煤墙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宪拥。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡仿野,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出她君,到底是詐尸還是另有隱情脚作,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站球涛,受9級特大地震影響劣针,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜亿扁,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一捺典、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧魏烫,春花似錦辣苏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至呐赡,卻和暖如春退客,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背链嘀。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工萌狂, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怀泊。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓茫藏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親霹琼。 傳聞我的和親對象是個殘疾皇子务傲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容