Javascriptで数字に直接ドットを繋げてメソッド書いちゃダメ
結論から言え!
javascriptを書くときに
1.toString() {}.id
はダメです、エラーになります
1..toString() ({}).id
はOKです、上は "1"
が、下はundifined
が返ります
JSに限った話ではないかも
以下出来事と解説
{}.idってエラーになりませんか?
先輩のコードレビューをしていてこんなコードに出会いました
(Hogehoge[fugafuga] || {}).id
fugafugaをキーとしてHogehogeオブジェクトの中のバリューを取り出し、取り出したバリューのidを取得します
そして取り出せなかった場合は空オブジェクトのidを取得します
僕 < これって{}.id
ってなってエラーになりませんか?
先輩 (師) < ({}).id
ってなってundifinedが返るから大丈夫
僕 < なるほど、わからん
コンソールで試してみましたが確かにそうですね 師曰く、「リテラルにドット繋げて直接操作しようとしてはいけない」そうです
リテラルとは
リテラルってなんだ?となってwiki先生に聞きました ja.wikipedia.org
うーん、いまいちわからん、、
ソースコード内で定義してあるものってことか、、
つまりどういうこと
このサイトがとてもわかりやすかったです
つまり何が起こっていたかと言うと
1.toString()
とかくとJavascriptはこのドットは小数点のドットなのかメソッドの前のドットなのか判断ができない
{}.id
とかくとJavascriptはこの{}はオブジェクトの{}なのかifや関数定義で使う{}なのかが判断できない
なのでエラーになってしまいます
a = 1
や b = {}
などして1度変数に入れてあげると
a.toString()
のドットはメソッドの前のドットだな
b.id
のb つまり{}はオブジェクトの{}だなと判断できるようになります
Javascriptの気持ちになってかけってことですね