1. ホーム
  2. javascript

[解決済み] JavaScriptで変数が配列であるかどうかを確認する方法は?

2022-03-15 01:51:35

質問

JavaScriptで変数が配列か単一値かを調べたいのですが、どうすればいいですか?

可能な解決策を見つけたのですが...。

if (variable.constructor == Array)...

これはこれでいいのでしょうか?

どのように解決するのですか?

変数が配列であるかどうかを確認する方法はいくつかあります。一番良いのは、あなたが選んだ方法です。

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]';

こいつはArrayを調べようとすると一番遅い。しかし、これはあなたが探しているあらゆるタイプのためのワンストップショップです。しかし、あなたが探しているのは配列なので、上記の最速メソッドを使用するだけです。

また、いくつかのテストを実行しました。 http://jsperf.com/instanceof-array-vs-array-isarray/35 では、楽しみながらチェックしてみてください。

注 jsperf.comがダウンしているため、@EscapeNetscapeが別のテストを作成しました。 http://jsben.ch/#/QgYAV jsperfがオンラインに戻ったときに、元のリンクが残るようにしたかったのです。