概要
緑さんは Pythonista の端くれだけれども、ブログを運営しているから JavaScript も使うわけよ。言ってみればサブウェポンなわけだが、一応ある程度は使いこなせるぜ。今回はぼくのサブウェポン捌きをご覧いただく。今宵は JavaScript の数値でブチ上がろう。
JavaScript の数値どうなってんだよ
node -v
# --> v22.9.0 これで実験してこうぜ。
node -e 'console.info( typeof NaN )'
# --> number これはまあ笑えるレベル。 Not-a-Number なのに number っつってね。
node -e 'console.info( 1 instanceof Number )'
# --> false え?
node -e 'console.info( Number(1) instanceof Number )'
# --> false は??
node -e 'console.info( new Number(1) instanceof Number )'
# --> true
はぁ…… (JavaScript をくしゃくしゃに丸めて捨てる)。
じゃあ解説してこうぜ
node -e 'console.info( typeof NaN )'
# --> number
# NaN が number 型なのは仕様。まあこれはいいよ。
node -e 'console.info( 1 instanceof Number )'
# --> false
# 1 は object の Number ではなく number (プリミティブ型) なのだ。
- オブジェクト:
typeof
で object って出るやつ。 Number とか String とか。 - プリミティブ型:
typeof
で number, string, boolean, undefined とか出るやつ。
node -e 'console.info( typeof Number )'
# --> function
# Number は、 new なしだと、キャスト関数らしい。
node -e 'console.info( Number(1) instanceof Number )'
# --> false
node -e 'console.info( typeof Number(1) )'
# --> number
# ただのキャスト関数だから、返り値は 1 で、 number である。
node -e 'console.info( new Number(1) instanceof Number )'
# --> true
node -e 'console.info( typeof new Number(1) )'
# --> object
# new Number(1) の返り値は Number。
おしまい
というわけで、今回ぼくらをブチ上げたのは、 JavaScript のオブジェクトとプリミティブ型という仕様だったな。
- Object: Number, String …
- Primitive (原始的): number, string, boolean …
まあわかりやすくはあるか。