Rumah >hujung hadapan web >tutorial js >JavaScript menentukan sama ada objek ialah petua array_javascript

JavaScript menentukan sama ada objek ialah petua array_javascript

WBOY
WBOYasal
2016-05-16 15:24:191101semak imbas

Artikel ini berkongsi tiga kaedah JavaScript untuk menentukan sama ada objek ialah tatasusunan,

1 Perkara pertama yang akan kita fikirkan ialah menggunakan typeof untuk mengesan jenis data, tetapi untuk jenis asas seperti Function, String, Number, Undefined, dll., ia boleh dikesan menggunakan typeof Sebagai contoh, kodnya seperti berikut:


function test(){}
console.log(typeof 1); // number
console.log(typeof test); // function 
console.log(typeof "yunxi"); // string
console.log(typeof undefined); // undefined
Tetapi untuk tatasusunan atau ungkapan biasa, menggunakan typeof untuk mengesannya adalah tidak memuaskan, kerana apabila kita mengesan tatasusunan atau ungkapan biasa, jenis yang dikembalikan akan menjadi objek, seperti yang ditunjukkan dalam kod berikut:


console.log(typeof []); // object
console.log(typeof /\d+/g); // object
2. Contoh

Daripada ini, kita boleh dengan mudah memikirkan menggunakan instanceof untuk mengesan sama ada objek adalah contoh tatasusunan at it again Kod di atas untuk mengesan sama ada ia adalah tatasusunan adalah seperti berikut:


console.log([] instanceof Array); // true
console.log(/\d+/g instanceof Array); // false
Seperti yang anda lihat di atas, menggunakan instanceof sememangnya boleh menentukan sama ada ia adalah elemen tatasusunan;

3. atribut pembina
Dalam JavaScript, setiap objek mempunyai atribut pembina, yang merujuk kepada pembina yang memulakan objek, seperti menentukan jenis objek yang tidak diketahui, jadi kita boleh menulis kaedah seperti berikut, kodnya adalah seperti berikut:


function isArray(obj) {
  return typeof obj == 'object' && obj.constructor == Array
}
// 测试demo
console.log(isArray([])); // true
var a = {"a":1};
console.log(isArray(a)); // false

var b = [1,2,3];
console.log(isArray(b)); // true
console.log(isArray(/\d+/g));// false

Seperti yang anda lihat di atas, anda juga boleh menentukan sama ada ia adalah elemen tatasusunan dengan memanggil kaedah isArray.
Kita kini dapat melihat bahawa untuk mata kedua dan ketiga, nampaknya menggunakan kaedah instanceof dan atribut pembina masing-masing boleh menentukan sama ada ia adalah tatasusunan, tetapi terdapat juga pengecualian, seperti apabila menggunakan tatasusunan dalam halaman apabila menggunakan salib -frame iframe. , akan gagal kerana tatasusunan yang dibuat dalam iframe yang berbeza tidak akan berkongsi atribut prototaip antara satu sama lain ujian kod berikut boleh disahkan~



var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array;    
var arr = new xArray("1","2","3","4","5");
//这个写法IE下是不支持的,标准浏览器firefox,chrome下有

console.log(arr); // 打印出 ["1", "2", "3", "4", "5"]
console.log(arr instanceof Array); // false 
console.log(arr.constructor === Array); // false

Kami tidak dapat menentukan sama ada objek ialah tatasusunan dengan kaedah di atas; tetapi kami dapat melihat daripada ECMA262 bahawa kami boleh menggunakan kaedah

Object.prototype.toString.call() untuk menentukan sama ada objek ialah tatasusunan;

Di atas ialah keseluruhan kandungan artikel ini untuk membantu anda mengetahui cara menentukan sama ada sesuatu objek ialah tatasusunan dalam JavaScript, saya harap ia akan membantu pembelajaran anda.
function isArray(obj) {
  return Object.prototype.toString.call(obj) == '[object Array]';
}
// 代码调用
console.log(isArray([])); // true
console.log(isArray([1,2,3])); // true

var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array;    
var arr = new xArray("1","2","3","4","5");

console.log(arr); // ["1","2","3","4","5"]
console.log(isArray(arr)); // true
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn