読者です 読者をやめる 読者になる 読者になる

tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

javascriptでオブジェクト({ }とか連想配列であるobject)の判定をしたいがnullや配列([ ])に悩まされる問題をまじめに自分用まとめ

はじめに

javascriptで引数なんかがオブジェクト({})であることを保障したいときってありますよね
こんな感じ

  • sample01

上記の※1のoptはこんな感じが多いかと思います

  • オブジェクト={}(中身はカラでも良い)であって欲しい
  • undefined、falseはヤダ
  • 数字や文字列もヤダ
  • 配列やnullもヤダ

そんなときの判定についてまとめてみました

ながれ

  1. typeofでの判定
  2. instanceofでの判定
    • instanceof Objectで
    • instanceof Arrayで
  3. typeofとinstanceofについてまとめ
  4. オブジェクト({}かどうか)を判定してみる
  5. 追記-配列の判定

1. typeofでの判定

typeofでの判定について試します
が、結果についてはあらかたわかっているので何でこれをやってみるかを最初に書きます

オブジェクトを期待してtypeof opt == objectとやる場合、
optが配列やnullの場合もtypeofの結果がobjectになるから

って事で検証

  • sample02

ちなみにsample01の※1の判定をtypeofに書き換えて
optがnullの場合はこんな結果がこんな感じのエラーになりまじウザですw

  • sample03
  • 結果

Uncaught TypeError: Cannot read property 'name' of null

配列の場合は。。。ややこしいので試しみてください \(^o^)/

2. instanceofでの判定

今度はinstanceofについてです
が、こちらもあらかた結果がわかっているので何でこれをやってみるか書いておきます

オブジェクトを期待してopt instanceof Objectとやる場合、
optが配列の場合も結果がtrueになる

instanceof Objectで

って事で検証

  • sample04

まぁ、そーですよね、ってことで続いてArrayについて

instanceof Arrayで
  • sample05

ってことで、Arrayかどうかって事に関しては
opt instanceof Arrayで取れることがわかりました

3. typeofとinstanceofについてまとめ

上記の結果を表でまとめてみます

optの値 typeof opt opt instanceof Object opt instanceof Array
{ } object true false
[ ] object true true
1 number false false
"string" string false false
false boolean false false
undefined undefined false false
null object false false

ってことで、これを元に条件判定を行ってやれば{}かどうか判定できそうです
typeofは使わず、instanceofだけでいけそうですね

4. オブジェクト({}かどうか)を判定してみる

上記の結果を元に、オブジェクトの判定をこんな感じにしてみました

※{}と[]を判定するためにlengthを使ったりの方法もあるかと思いますが
あくまでも上記のまとめからの判定ってことで

  • sample06

というわけでsample01はこんな感じで判定してみてはどうでしょうかっていう

  • sample07

まとめ

今回はオブジェクトかどうかを判定してみました!
途中の注記にも書きましたが、他にも方法はあるかと思います。
が、いろんな良い方法あったら教えてくださーい \(^o^)/

5. 追記-配列の判定

追記ですが、コメントも頂いたので
配列の判定に関してだけ別記事でまとめてみました!
avascriptで配列かどうか判定するメモ(ダックタイピングとかObject.prototype.toStringとかgetPrototypeOfで)