首頁  >  文章  >  web前端  >  如何判斷一個JavaScript變數是array還是obiect答案程式碼詳解

如何判斷一個JavaScript變數是array還是obiect答案程式碼詳解

伊谢尔伦
伊谢尔伦原創
2017-07-26 11:45:001213瀏覽

怎麼判斷一個JavaScript變數是array還是obiect? 

答案:
1、如果你只是用typeof來檢查該變量,無論是array還是object,都會回傳‘objec'。
此問題的一個可行的答案是是檢查該變數是不是object,並且檢查該變數是否有數字長度(當為空array時長度也可能為0)。
然而,參數物件【arguments object】(傳給制定函數的所有參數),也可能會適用於上述方法,技術上來說,參數物件並不是一個array。
此外,當一個物件有a.length屬性的時候,這個方法也不成立。 

// Real array 正在的数组 
var my_array = []; 
// Imposter! 冒名顶替的! 
var my_object = {}; 
my_object.length = 0; 
// Potentially faulty 潜在的错误 
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、回答這個問題的另一個答案是用一個更隱密的方法,呼叫toString( )方法試著將該變數轉換為代表其類型的string。
此方法對於真正的array可行;參數物件轉換為string時傳回[object Arguments]會轉換失敗;此外,
對於含有數字長度屬性的object類別也會轉換失敗。 

// Real array 真正的数组 
var my_array = []; 
// Imposter! 冒名顶替的! 
var my_object = {}; 
my_object.length = 0; 
// Rock solid 坚如磐石(检验函数) 
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! 不是数组(array)! 
is_this_an_array(my_object);


3、此外,在可能不可靠的多框架DOM環境中,instanceof是個完美適當的操作。

var my_array = []; 
if (my_array instanceof Array) { 
console.log('Congrats, you have an array!'); 
}


4、對於Javascript 1.8.5(ECMAScript 5),變數名稱.isArray( )可以實現這個目的

var my_array = []; 
if (Array.isArray(my_array)) { 
console.log('Congrats, you have an array!'); 
}


以上是如何判斷一個JavaScript變數是array還是obiect答案程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn