[解決済み] JavaScriptで変数が配列であるかどうかを確認する方法は?
質問
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がオンラインに戻ったときに、元のリンクが残るようにしたかったのです。
関連
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み】JavaScriptでインラインIF文の書き方は?
-
フロントエンド非同期(アシンク)ソリューション(全ソリューション)
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Vueがechartsのtooltipにクリックイベントを追加するケーススタディ
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み] 期待される代入または関数呼び出し: 未使用式なし ReactJS
-
[解決済み】JavaScriptエラー(Uncaught SyntaxError: Unexpected end of input)
-
[解決済み】(Google Map API) Geocodeは以下の理由で成功しませんでした。REQUEST_DENIED
-
[解決済み】リクエストに失敗していないのに、「TypeError: failed to fetch」が表示される。
-
nodejs unhandledPromiseRejectionWarning メッセージ
-
nullのプロパティinnerHTMLを読み取れません エラーメッセージ
-
[解決済み] オブジェクトが配列であるかどうかを確認するにはどうすればよいですか?[重複]。