Javascript中判斷變量是數(shù)組還是對(duì)象(array還是object)
答案:
1、如果你只是用typeof來(lái)檢查該變量,不論是array還是object,都將返回‘objec'。
此問(wèn)題的一個(gè)可行的答案是是檢查該變量是不是object,并且檢查該變量是否有數(shù)字長(zhǎng)度(當(dāng)為空array時(shí)長(zhǎng)度也可能為0)。
然而,參數(shù)對(duì)象【arguments object】(傳給制定函數(shù)的所有參數(shù)),也可能會(huì)適用于上述方法,技術(shù)上來(lái)說(shuō),參數(shù)對(duì)象并不是一個(gè)array。
此外,當(dāng)一個(gè)對(duì)象有a.length屬性的時(shí)候,這個(gè)方法也不成立。
// Real array 正在的數(shù)組
var my_array = [];
// Imposter! 冒名頂替的!
var my_object = {};
my_object.length = 0;
// Potentially faulty 潛在的錯(cuò)誤
function is_this_an_array(param) {
if (typeof param === 'object' && !isNaN(param.length)) {
console.log('Congrats, you have an array!');
}
else {
console.log('Bummer, not an array');
}
}
// Works 成功
is_this_an_array(my_array);
// Works, but is incorrect 成功了,但是不正確
is_this_an_array(my_object);
2、回答這個(gè)問(wèn)題的另一個(gè)答案是用一個(gè)更加隱蔽的方法,調(diào)用toString( )方法試著將該變量轉(zhuǎn)化為代表其類(lèi)型的string。
該方法對(duì)于真正的array可行;參數(shù)對(duì)象轉(zhuǎn)化為string時(shí)返回[object Arguments]會(huì)轉(zhuǎn)化失?。淮送?,
對(duì)于含有數(shù)字長(zhǎng)度屬性的object類(lèi)也會(huì)轉(zhuǎn)化失敗。
// Real array 真正的數(shù)組
var my_array = [];
// Imposter! 冒名頂替的!
var my_object = {};
my_object.length = 0;
// Rock solid 堅(jiān)如磐石(檢驗(yàn)函數(shù))
function is_this_an_array(param) {
if (Object.prototype.toString.call(param) === '[object Array]') {
console.log('Congrats, you have an array!');
}
else {
console.log('Bummer, not an array');
}
}
// Works 成功了
is_this_an_array(my_array);
// Not an array, yay! 不是數(shù)組(array)!
is_this_an_array(my_object);
3、此外,在可能不可靠的多框架DOM環(huán)境中,instanceof是個(gè)完美合適的操作。
擴(kuò)展閱讀:"Instanceof Considered Harmful…"
http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray
var my_array = [];
if (my_array instanceof Array) {
console.log('Congrats, you have an array!');
}
4、對(duì)于Javascript 1.8.5(ECMAScript 5),變量名字.isArray( )可以實(shí)現(xiàn)這個(gè)目的
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/isArray
var my_array = [];
if (Array.isArray(my_array)) {
console.log('Congrats, you have an array!');
}
- JS判斷數(shù)組里是否有重復(fù)元素的方法小結(jié)
- JS 判斷某變量是否為某數(shù)組中的一個(gè)值的3種方法(總結(jié))
- JavaScript判斷數(shù)組是否包含指定元素的方法
- JS判斷數(shù)組中是否有重復(fù)值得三種實(shí)用方法
- js判斷數(shù)組是否包含某個(gè)字符串變量的實(shí)例
- js判斷數(shù)據(jù)類(lèi)型如判斷是否為數(shù)組是否為字符串等等
- js實(shí)現(xiàn)數(shù)組去重、判斷數(shù)組以及對(duì)象中的內(nèi)容是否相同
- JS實(shí)現(xiàn)判斷數(shù)組是否包含某個(gè)元素示例
- js判斷兩個(gè)數(shù)組相等的5種方法實(shí)例
- js怎么判斷是否是數(shù)組的六種方法小結(jié)
相關(guān)文章
小程序自定義單頁(yè)面、全局導(dǎo)航欄的實(shí)現(xiàn)代碼
這篇文章主要介紹了小程序自定義單頁(yè)面、全局導(dǎo)航欄的實(shí)現(xiàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03js 把字符串當(dāng)函數(shù)執(zhí)行的方法
一段字符串 里面包含了 要執(zhí)行的函數(shù)和參數(shù)等,需要去執(zhí)行這段字符串。2010-03-03js的window.showModalDialog及window.open用法實(shí)例分析
這篇文章主要介紹了js的window.showModalDialog及window.open用法,實(shí)例分析了window.showModalDialog與window.open方法的定義、功能與使用技巧,需要的朋友可以參考下2015-01-01JavaScript聲明變量的這四兄弟(var、let、function、const)
這篇文章主要介紹了JavaScript聲明變量的這四兄弟,主要就是介紹var、let、function、const區(qū)別,需要的朋友可以參考下2023-02-02JavaScript或jQuery 獲取option value值方法解析
這篇文章主要介紹了JavaScript或jQuery 獲取option value值方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05javascript與Python快速排序?qū)嵗龑?duì)比
這篇文章主要介紹了javascript與Python快速排序?qū)嵗龑?duì)比,實(shí)例講述了javascript與Python實(shí)現(xiàn)快速排序的簡(jiǎn)單實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08innerText和textContent對(duì)比及使用介紹
innerText使用過(guò)程中遇到了FireFox的兼容問(wèn)題FireFox不支持innerText方法但是有個(gè)類(lèi)似的方法,叫textContent,類(lèi)似innerText,都是用來(lái)獲?。ㄔO(shè)置)元素中text的方法,感興趣的朋友可以參考下2013-02-02微信小程序?qū)崿F(xiàn)滑動(dòng)/點(diǎn)擊切換Tab及scroll-left的使用
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)滑動(dòng)/點(diǎn)擊切換Tab,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04