Javascriptで数字に直接ドットを繋げてメソッド書いちゃダメ

結論から言え!

javascriptを書くときに

1.toString()

{}.id

はダメです、エラーになります

1..toString()

({}).id

はOKです、上は "1"が、下はundifinedが返ります 

JSに限った話ではないかも

以下出来事と解説

{}.idってエラーになりませんか?

先輩のコードレビューをしていてこんなコードに出会いました

(Hogehoge[fugafuga] || {}).id

fugafugaをキーとしてHogehogeオブジェクトの中のバリューを取り出し、取り出したバリューのidを取得します

そして取り出せなかった場合は空オブジェクトのidを取得します

僕 < これって{}.idってなってエラーになりませんか?

先輩 (師) < ({}).idってなってundifinedが返るから大丈夫

僕 < なるほど、わからん

コンソールで試してみましたが確かにそうですね   f:id:poul8et6:20191206104759p:plain   師曰く、「リテラルにドット繋げて直接操作しようとしてはいけない」そうです

リテラルとは

リテラルってなんだ?となってwiki先生に聞きました   ja.wikipedia.org

コンピュータプログラミング言語においてリテラルは、ソースコード内に値を直接表記したものをいう。

うーん、いまいちわからん、、

ソースコード内で定義してあるものってことか、、

つまりどういうこと

このサイトがとてもわかりやすかったです

bonsaiden.github.io

つまり何が起こっていたかと言うと

1.toString() とかくとJavascriptはこのドットは小数点のドットなのかメソッドの前のドットなのか判断ができない

{}.id とかくとJavascriptはこの{}はオブジェクトの{}なのかifや関数定義で使う{}なのかが判断できない

なのでエラーになってしまいます

a = 1b = {} などして1度変数に入れてあげると

a.toString() のドットはメソッドの前のドットだな

b.id のb つまり{}はオブジェクトの{}だなと判断できるようになります

Javascriptの気持ちになってかけってことですね