JavaScript で変数が配列であるかどうかを確認するにはどうすればよいですか?
if (variable.constructor == Array)
ベストアンサー1
変数が配列であるかどうかを確認する方法はいくつかあります。最適な解決策は、選択した方法です。
variable.constructor === Array
これは Chrome で最も速い方法であり、おそらく他のすべてのブラウザでもそうです。すべての配列はオブジェクトなので、コンストラクター プロパティをチェックすることは JavaScript エンジンにとって高速なプロセスです。
オブジェクトのプロパティが配列であるかどうかを確認する際に問題が発生する場合は、まずそのプロパティが存在するかどうかを確認する必要があります。
variable.prop && variable.prop.constructor === Array
その他の方法は次のとおりです:
Array.isArray(variable)
2019 年 5 月 23 日更新、Chrome 75 使用。@AnduAndrici の質問でこの件を再検討させてくれたことに感謝します。この最後のものは、私の意見では最も醜く、最も遅いものの 1 つです。
最初
の
例の約 1/5 の速度で実行されています。
この例は約 2 ~ 5% 遅いですが、違いはわかりにくいです。使い心地は抜群です。結果には非常に感心しました。Array.prototype は実際には配列です。詳細については、こちらをご覧ください。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray
variable instanceof Array
このメソッドは、最初の例の約
1/3 の速度
variable instanceof Number
で実行されます。それでもかなり安定しており、見た目もきれいです。パフォーマンスよりも美しいコードが重要であればなおさらです。常に が返されるため、数値のチェックは機能しないことに注意してくださいfalse
。更新:instanceof
速度が 2/3 になりました。
ということで、またアップデート
Object.prototype.toString.call(variable) === '[object Array]';
これは、配列をチェックしようとすると最も遅くなります。ただし、これは、探しているすべての型をワンストップで見つけられる方法です。ただし、配列を探しているのであれば、上記の最も高速な方法を使用してください。
また、いくつかテストを実行しました:http://jsperf.com/instanceof-array-vs-array-isarray/35ぜひ楽しんでチェックしてみてください。
注: jsperf.com がダウンしているため、@EscapeNetscape が別のテストを作成しました。http://jsben.ch/#/QgYAVjsperf がオンラインに戻ったときに元のリンクが確実に残るようにしたかったのです。