たのしいJavaScriptの仕様
最近久しぶりにReact.jsを書いているんですが、細かい javascript の文法とかを忘れてしまって、↓の本を読んでいる。
最近のjavascriptは色々と良く
Rediscovering JavaScript: Master ES6, ES7, and ES8
- 作者: Venkat Subramaniam
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2018/06/21
- メディア: ペーパーバック
- この商品を含むブログを見る
なったので良いところとその使い方を詳しく紹介する、という趣旨の本だと思うが、最初の1/4くらいでは、前提として昔のjsのどこがだめだったかというのが述べられている。プログラミング言語のだめな仕様、最初はいい加減にしろと思って終わるのだが、詳しくなってくるとだめな仕様に詳しくなるとき専用の気持ちよさみたいなものがある気がする。
かなり昔、たしか↓の本
- 作者: David Flanagan,村上列
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/08/10
- メディア: 大型本
- 購入: 12人 クリック: 252回
- この商品を含むブログ (18件) を見る
でjavascriptを勉強した時に知ったBooleanのラッパー型の悲しい仕様。
const FALSE = new Boolean(false) console.log(new Boolean(FALSE)) // [Boolean: true]
↑のような状況に実際になることはまずないとは思うが、悲しすぎる...。
次にこの本にも載っていたvar
の話。最近jsを勉強している人ならvar
は使わない方が良いというのは常識になっていると思うが、var
の何がだめかというと、以下の2点にまとめられるらしい。
- 変数の再宣言が許されている
- ブロックスコープではなく関数スコープ+hoistingという仕様のため、
var
で変数宣言した変数のスコープがやっかいになる
スコープの話はめんどくさいので置いておくとして、変数の再宣言の話は以下のようなコードが許されるということである。
var a = 1 var a = 2 // エラーにならない!
人類は以下の2通りに分類できる
- ↑のコードの2行目で、1行目とは違う変数に2を代入したかった人
- ↑のコードの2行目で、1行目と同じ変数に2を代入したかった人
1の人は、例えばvar aa = 1
と書きたかったはずなので、↑のコードは絶対にエラーになってほしいはずである。2の人は、a = 2
と書きたかったはずなので、↑のコードはエラーになってくれた方がありがたいはずである。つまり、全人類が↑のコードの2行目でエラーが出てほしいと願っているのにエラーが出ないということになる。全人類...。
このvar
の仕様は、最近のjsではconst
やlet
によって解決されているし、昔のjsの他のだめな点も色々と改善されている。jsは最低でもあと5年くらいは重要なプログラミング言語であり続けると思うので、詳しくなっておきたい。