Rumah > hujung hadapan web > tutorial js > Bagaimana untuk menentukan sama ada pembolehubah ialah tatasusunan dalam es6

Bagaimana untuk menentukan sama ada pembolehubah ialah tatasusunan dalam es6

青灯夜游
Lepaskan: 2022-03-08 16:50:22
asal
3474 orang telah melayarinya

Dalam es6, anda boleh menggunakan kaedah isArray() Array untuk menentukan sama ada pembolehubah ialah tatasusunan Kaedah ini digunakan untuk menentukan sama ada objek ialah jenis tatasusunan. "; jika objek adalah Array mengembalikan benar, jika tidak mengembalikan palsu.

Bagaimana untuk menentukan sama ada pembolehubah ialah tatasusunan dalam es6

Persekitaran pengendalian tutorial ini: sistem Windows 7, ECMAScript versi 6, komputer Dell G3.

Menentukan sama ada pembolehubah ialah tatasusunan dalam ES5

Dalam ES5, kita mempunyai sekurang-kurangnya 5 cara berikut untuk menentukan sama ada nilai itu tatasusunan:

var a = []; 
// 1.基于instanceof 
a instanceof Array; 
// 2.基于constructor 
a.constructor === Array; 
// 3.基于Object.prototype.isPrototypeOf 
Array.prototype.isPrototypeOf(a); 
// 4.基于getPrototypeOf 
Object.getPrototypeOf(a) === Array.prototype; 
// 5.基于Object.prototype.toString 
Object.prototype.toString.apply(a) === '[object Array]';
Salin selepas log masuk

Di atas, kecuali Object.prototype.toString, tiada kaedah lain boleh menentukan jenis pembolehubah dengan betul.

Anda mesti tahu bahawa persekitaran berjalan kod adalah sangat kompleks dan pembolehubah mungkin menggunakan semua jenis helah untuk mengelirukan penciptanya. Melihat kepada

var a = {
    __proto__: Array.prototype
}; 
// 分别在控制台试运行以下代码 
// 1.基于instanceof 
a instanceof Array; // => true 
// 2.基于constructor 
a.constructor === Array; // => true 
// 3.基于Object.prototype.isPrototypeOf 
Array.prototype.isPrototypeOf(a); // => true 
// 4.基于getPrototypeOf 
Object.getPrototypeOf(a) === Array.prototype; // => true
Salin selepas log masuk

di atas, keempat-empat kaedah akan kembali benar Mengapa? Kami hanya menetapkan atribut __proto__ objek secara manual sebagai Array.prototype, yang menyebabkan objek mewarisi objek Array Kaedah pewarisan yang tidak bertanggungjawab ini menyebabkan skim penghakiman berasaskan warisan runtuh serta-merta.

Bukan itu sahaja, kami juga tahu bahawa Array ialah data timbunan, dan pembolehubah hanya menunjuk ke alamat rujukannya, jadi alamat yang dirujuk oleh objek Array setiap halaman adalah berbeza. Untuk tatasusunan yang diisytiharkan dalam iframe, pembinanya ialah objek Tatasusunan dalam iframe. Jika tatasusunan x diisytiharkan dalam iframe dan diperuntukkan kepada pembolehubah y halaman induk, maka y instanceof Array digunakan pada halaman induk, dan hasilnya mestilah palsu. Yang terakhir mengembalikan rentetan, jadi tiada masalah rujukan. Malah, interaksi antara berbilang halaman atau sistem hanya boleh dilakukan dengan rentetan.

Tentukan sama ada pembolehubah ialah tatasusunan dalam ES6

Memandangkan penggunaan biasa tatasusunan, kaedah Array.isArray ditambah dalam ES6, gunakan Kaedah ini sangat mudah untuk menentukan sama ada pembolehubah ialah tatasusunan, seperti berikut:

Array.isArray([]); // => true 
Array.isArray({0: 'a', length: 1}); // => false
Salin selepas log masuk

Malah, menggunakan Object.prototype.toString untuk menentukan jenis nilai juga merupakan standard untuk arus perdana utama perpustakaan. Oleh itu, polyfill Array.isArray biasanya kelihatan seperti ini:

if (!Array.isArray){ 
    Array.isArray = function(arg){ 
        return Object.prototype.toString.call(arg) === '[object Array]'; 
    }; 
}
Salin selepas log masuk

[Cadangan berkaitan: tutorial video javascript, bahagian hadapan web]

Atas ialah kandungan terperinci Bagaimana untuk menentukan sama ada pembolehubah ialah tatasusunan dalam es6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan