最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS之判斷是否為對(duì)象或數(shù)組的幾種方式總結(jié)

 更新時(shí)間:2023年04月19日 09:31:22   作者:前端@小菜  
這篇文章主要介紹了JS之判斷是否為對(duì)象或數(shù)組的幾種方式總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

JS判斷是否為對(duì)象或數(shù)組的幾種方式

判斷值是否是對(duì)象

1.toString 方式【常用】

Object.prototype.toString.call(val) === '[object Object]' // true 代表為對(duì)象

注意:這里要使用 call 方法改變作用域

2.constructor 方式

val?.constructor === Object // true 代表為對(duì)象

這里使用了 null 傳導(dǎo)符(?.) 以防止出錯(cuò)

3.typeof 與 instanceof

typeof 與 instanceof 并不能完全判斷一個(gè)值為對(duì)象

typeof 的取值有:

  • "undefined"——如果這個(gè)值未定義;
  • "boolean"——如果這個(gè)值是布爾值;
  • "string"——如果這個(gè)值是字符串;
  • "number"——如果這個(gè)值是數(shù)值;
  • "object"——如果這個(gè)值是對(duì)象(包括數(shù)組)或null;
  • "function"——如果這個(gè)值是函數(shù);
  • "symbol"——如果這個(gè)值是Symbol

instanceof 操作符對(duì)于數(shù)組和對(duì)象都返回 true

[] instanceof Object // true
new Object instanceof Object // true

4.__proto__ 方式【不推薦】

 __proto__屬性,用來(lái)讀取或設(shè)置當(dāng)前對(duì)象的 prototype 對(duì)象,此屬性未納入標(biāo)準(zhǔn),不建議使用。

val.__proto__ === Object.prototype // true 代表為對(duì)象

5.Object.getPrototypeOf 方式

Object.getPrototypeOf(),用來(lái)讀取對(duì)象的 prototype 對(duì)象。

Object.getPrototypeOf(val) === Object.prototype // true 代表為對(duì)象

判斷值是否為數(shù)組

1.toString 方式

Object.prototype.toString.call(val) === '[object Array]' // true 代表為數(shù)組

注意:這里要用 Object 的 toString 方法,Array 的 toString 返回的是拼接的字符串

var colors = ['red', 'blue', 'green'];
console.log(colors.toString()); ?// red,blue,green

2.Array.isArray 方法【推薦】

ES5中提供了 isArray 方法用來(lái)判斷值是否為數(shù)組

Array.isArray(val) // true 代表為數(shù)組

3.instanceof 方式

val instanceof Array // true 代表為數(shù)組

為什么 instanceof 可以用來(lái)判斷數(shù)組而不可以判斷對(duì)象呢?因?yàn)閿?shù)組本身就是一個(gè)類(lèi)似于列表的高階對(duì)象。

4.constructor 方式

val?.constructor === Array // true 代表為數(shù)組

5. __proto__ 方式【不推薦】

val.__proto__ === Array.prototype // true 代表為數(shù)組

6.Object.getPrototypeOf 方式 

Object.getPrototypeOf(val) === Array.prototype // true 代表為數(shù)組

7.isPrototypeOf 方式

isPrototypeOf() 方法用于測(cè)試一個(gè)對(duì)象是否存在于另一個(gè)對(duì)象的原型鏈上。

Array.prototype.isPrototypeOf(val) // true 代表為數(shù)組

該方式不能用來(lái)判斷對(duì)象!

如何判斷一個(gè)對(duì)象是不是數(shù)組(例子解釋?zhuān)?/h2>

先上代碼

      let shuzu=[];
      shuzu.push(1,2,3,43);      //向數(shù)組里添加幾項(xiàng)
      console.log(shuzu);        //打印這個(gè)數(shù)組
      console.log(Array.isArray(shuzu));                  //方法1
      console.log(shuzu instanceof Array);                //方法2
      console.log(Array.prototype.isPrototypeOf(shuzu));  //方法3
      console.log(Object.prototype.toString.call(shuzu)); //方法4

結(jié)果:

在這里插入圖片描述

四種方法我簡(jiǎn)稱(chēng)方法1,方法2,方法3,方法4。

方法1:Array.isArray(…),這是JS已經(jīng)提供的判斷一個(gè)對(duì)象是不是數(shù)組的方法

方法2: … instanceof Array,instanceof是用來(lái)判斷引用類(lèi)型的方法,而type則是用來(lái)判斷基本類(lèi)型的方法,instanceof 運(yùn)算符用來(lái)測(cè)試一個(gè)對(duì)象在其原型鏈中是否存在一個(gè)構(gòu)造函數(shù)的 prototype 屬性,返回一個(gè)布爾值。

方法3:Array.prototype.isPrototypeOf(…),利用isPrototypeOf()方法,判定Array是不是在obj的原型鏈中,如果是,則返回true,否則false。

方法4:Object.prototype.toString.call(…),根據(jù)對(duì)象的class屬性(類(lèi)屬性),跨原型鏈調(diào)用toString()方法,在js中一個(gè)對(duì)象一旦被創(chuàng)建,在內(nèi)部會(huì)攜帶創(chuàng)建對(duì)象的類(lèi)型名,js中提供了調(diào)用對(duì)象原型中的toString方法,也就是其中call可以這么理解,相當(dāng)于對(duì)象去借用這個(gè) Object.prototype.toString();

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

同德县| 新竹市| 遂平县| 小金县| 华容县| 长乐市| 孟津县| 临江市| 长沙县| 吕梁市| 龙川县| 蓬安县| 巩留县| 当阳市| 体育| 广水市| 巩留县| 门头沟区| 沿河| 阿克陶县| 增城市| 铜鼓县| 永定县| 苍山县| 龙江县| 吴忠市| 治多县| 揭阳市| 陈巴尔虎旗| 上犹县| 忻州市| 大余县| 乐至县| 福清市| 昆明市| 建平县| 丘北县| 吕梁市| 临沭县| 浦江县| 天等县|