はじめに
javascriptで引数なんかがオブジェクト({}
)であることを保障したいときってありますよね
こんな感じ
- sample01
上記の※1のoptはこんな感じが多いかと思います
- オブジェクト={}(中身はカラでも良い)であって欲しい
- undefined、falseはヤダ
- 数字や文字列もヤダ
- 配列やnullもヤダ
そんなときの判定についてまとめてみました
ながれ
- typeofでの判定
- instanceofでの判定
- instanceof Objectで
- instanceof Arrayで
- typeofとinstanceofについてまとめ
- オブジェクト({}かどうか)を判定してみる
- 追記-配列の判定
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で)