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.
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]';
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
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
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]'; }; }
[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!