JS判斷數(shù)組那點(diǎn)事
面試題中有個(gè)這樣題目 如何判斷數(shù)組 大家都知道哪些方法
其實(shí)有時(shí)候 明明知道哪些方法 但在關(guān)鍵時(shí)候就是說(shuō)不上來(lái)
typeof運(yùn)算符
typeof會(huì)返回這個(gè)類型的字符串
var a = '123' console.log(typeof(a)) //string var b = [] console.log(typeof(b)) //object var c = {} console.log(typeof(c)) //object var d = null console.log(typeof(d)) //object
上述看到 數(shù)組 對(duì)象 null 用typeof返回都是object 這種方法不能識(shí)別出是否為數(shù)組
原型contructor鏈方法
實(shí)例化有一個(gè)contructor屬性 這個(gè)屬性指向生成對(duì)象 數(shù)組的方法
var a = [] console.log(a.__proto__.constructor) //ƒ Array() { [native code] } var b = {} console.log(b.__proto__.constructor) //ƒ Object() { [native code] }
上述看到 數(shù)組是由Array函數(shù)實(shí)例化的 對(duì)象由Object函數(shù)實(shí)例化來(lái)得
感覺(jué)這種方法是可以了 但是 constructor這個(gè)屬性是可以被改寫的
var a = [] a.__proto__.constructor = Object console.log(a.__proto__.constructor) //ƒ Object() { [native code] }
可以看到 這個(gè)是 變成了數(shù)組判斷成了對(duì)象 所以這個(gè)方法也不是最好的
instanceof
這個(gè)方法是判斷某個(gè)構(gòu)造函數(shù)的prototype屬性所指向的對(duì)象是否在另外一個(gè)要檢測(cè)對(duì)象的原型鏈上
var a = [] console.log(a instanceof Array) //a對(duì)象的原型鏈上能找到Array true console.log(a instanceof Object) //true 原型鏈上也能找到對(duì)象
上述這種也不是特別好 判斷不出是數(shù)組還是對(duì)象
通用的方法 toString
toString() 方法返回放映這個(gè)對(duì)象的字符串
var a= '123' console.log(a.toString()) //123 var b = [1,2,3] console.log(b.toSting()) //1,2,3 var c = {} console.log(c.toString)) //[object Object]
可以看到只有對(duì)象返回對(duì)象類型
返回[object type] type代表對(duì)象的類型
判斷對(duì)象用Object的toString的方法拿過(guò)來(lái)用
var a =[] Object.prototype.toString.call(a) //[object Array]
這個(gè)對(duì)象 toString方法是可以判斷出是否為數(shù)組
但是這里注意下有個(gè)情況就是對(duì)象原型上toString() 也是可以更改的
Array.isArray(XX)
個(gè)人感覺(jué)還是使用通用方法 toString() 方法靠譜
總結(jié)
以上所述是小編給大家介紹的JS判斷數(shù)組那點(diǎn)事,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
js處理層級(jí)數(shù)據(jù)結(jié)構(gòu)的方法小結(jié)
本文主要介紹了js處理層級(jí)數(shù)據(jù)結(jié)構(gòu)的方法。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01JavaScript eval()函數(shù)定義及使用方法詳解
這篇文章主要介紹了JavaScript eval()函數(shù)定義及使用方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07帶領(lǐng)大家學(xué)習(xí)javascript基礎(chǔ)篇(一)之基本概念
這篇文章主要介紹了帶領(lǐng)大家學(xué)習(xí)javascript基礎(chǔ)篇(一)之基本概念的相關(guān)資料,需要的朋友可以參考下2015-11-11微信小程序?qū)崿F(xiàn)倒計(jì)時(shí)60s獲取驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)倒計(jì)時(shí)60s獲取驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Js實(shí)現(xiàn)累加上漂浮動(dòng)畫示例
這篇文章主要為大家介紹了Js實(shí)現(xiàn)累加上漂浮動(dòng)畫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11JS利用Canvas實(shí)現(xiàn)文字水印和圖片水印合成
這篇文章主要為大家詳細(xì)介紹了JavaScript如何利用Canvas實(shí)現(xiàn)文字水印和圖片水印合成的效果,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下2022-11-11Bootstrap開發(fā)實(shí)戰(zhàn)之第一次接觸Bootstrap
Bootstrap開發(fā)實(shí)戰(zhàn)之第一次接觸Bootstrap,想要學(xué)好一門語(yǔ)言,首先應(yīng)該進(jìn)行深入了解,感興趣的小伙伴們可以參考一下2016-06-06