Lebih
Bagaimana untuk memeriksa apakah sebuah objek adalah sebuah array?
I'm mencoba untuk menulis sebuah fungsi yang menerima daftar string, atau sebuah string tunggal. Jika itu's string, maka saya ingin mengubahnya ke array dengan hanya satu item. Kemudian saya dapat loop di atasnya tanpa takut kesalahan.
Jadi bagaimana saya memeriksa apakah variabel adalah suatu array?
I've dibulatkan berbagai solusi di bawah ini dan menciptakan jsperf tes.
2570
47
Metode yang diberikan dalam ECMAScript standar untuk menemukan kelas Objek adalah dengan menggunakan
toString
metode dari Objek.prototipe`.Atau anda bisa menggunakan
jenis
untuk menguji jika itu adalah sebuah String:Atau jika anda're tidak peduli tentang kinerja, anda hanya bisa melakukan
concat
ke new Array kosong.Ada's juga konstruktor mana anda dapat query langsung:
Check out perawatan menyeluruh dari @T. J. Crowder's blog, seperti yang diposting di komentar di bawah ini.
Check out ini benchmark untuk mendapatkan gambaran metode mana yang berkinerja lebih baik: http://jsben.ch/#/QgYAV
Dari @Bharath mengkonversi string ke array menggunakan Es6 untuk pertanyaan yang diajukan:
misalkan:
Saya akan periksa dulu jika anda mendukung pelaksanaan
isArray
:Anda juga bisa mencoba menggunakan
instanceof
operatorDi browser modern yang dapat anda lakukan
(Didukung oleh Chrome 5, Firefox 4.0, IE 9, Opera 10.5 dan Safari 5)
Untuk kompatibilitas, anda dapat menambahkan kode berikut
Jika anda menggunakan jQuery, anda dapat menggunakan
jQuery.isArray(obj)
atau$.isArray(obj)
. Jika anda menggunakan garis bawah anda dapat menggunakan_.isArray(obj)
Jika anda don't perlu untuk mendeteksi array yang dibuat dalam frame yang berbeda anda juga dapat hanya menggunakan
instanceof
jQuery juga menawarkan sebuah
$.isArray()
metode:Ini adalah yang tercepat di antara semua metode (semua browser yang didukung):
Bayangkan anda memiliki ini array di bawah ini:
Javascript (baru dan browser yang lebih tua):
atau
atau
kemudian menyebutnya seperti ini:
Javascript (IE9+, Ch5+, FF4+, Saf5+, Opera10.5+)
jQuery:
Sudut:
Menggarisbawahi dan Lodash:
Array.isArray bekerja cepat, tapi itu bukan't didukung oleh semua versi browser. Jadi anda bisa membuat pengecualian bagi orang lain dan menggunakan metode universal:
Fungsi sederhana untuk memeriksa ini:
Ada's hanya satu line solusi untuk pertanyaan ini
di mana x adalah variabel itu akan mengembalikan true jika x adalah sebuah array dan false jika tidak.
Sebagai MDN kata di sini:
Seperti ini:
Objek.prototipe.toString.panggilan(arr) === '[Array object]'
, atauArray.isArray(arr)
Saya akan membuat fungsi untuk menguji jenis objek yang anda berurusan dengan...
maka anda bisa menulis sederhana jika pernyataan...
Anda dapat memeriksa jenis variabel apakah itu adalah sebuah array dengan;
Ini adalah upaya saya untuk memperbaiki jawaban ini dengan mempertimbangkan komentar:
Hal itu akan menyingkirkan if/else, dan account untuk kemungkinan array menjadi null atau tidak terdefinisi
Saya melakukan hal ini dalam cara yang sangat sederhana. Bekerja untuk saya. Kelemahan?
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/isArray
Saya telah diperbarui jsperf biola dengan dua metode alternatif serta memeriksa kesalahan.
Ternyata metode ini menentukan nilai konstan di 'Objek' dan 'Array' prototipe yang lebih cepat daripada metode lain. Hal ini agak mengejutkan hasilnya.
Kedua metode ini tidak bekerja jika variabel mengambil nilai tak terdefinisi, tapi mereka melakukan pekerjaan jika anda yakin bahwa mereka memiliki nilai. Berkaitan dengan pemeriksaan dengan kinerja dalam pikiran jika nilai array atau nilai tunggal, kedua metode ini tampak seperti yang valid metode cepat. Itu adalah sedikit lebih cepat dari 'instanceof' pada Chrome, dua kali lebih cepat sebagai terbaik kedua metode di Internet Explorer, Opera, dan Safari (di komputer saya).
Aku tahu, bahwa orang-orang yang mencari beberapa jenis baku javascript pendekatan. Tetapi jika anda ingin berpikir sedikit tentang, lihat di sini: http://underscorejs.org/#isArray
Mengembalikan true jika object adalah sebuah Array.
Berikut dapat digunakan jika anda tahu bahwa anda objek doesn't memiliki concat metode.
var arr = []; if (typeof arr.concat === 'fungsi') { konsol.log("It's array"); }
Berikut ini's my malas pendekatan:
Aku tahu itu's penistaan untuk "main-main dengan" prototipe, tetapi itu muncul untuk melakukan yang lebih baik secara signifikan dari yang dianjurkan
toString
metode.Catatan: perangkap dari pendekatan ini adalah bahwa hal itu tidak bekerja di
iframe
boundariestapi bagi saya hal ini tidak menjadi masalah.Solusi terbaik saya've terlihat adalah cross-browser pengganti typeof. Cek Angus Croll's solusi di sini.
TL;DR versi di bawah ini, tapi artikel ini adalah pembahasan masalah sehingga anda harus membaca ini jika anda memiliki waktu.