JavaScriptの勉強をしたくて読んでる。英語なので時間がかかってるけど、良い本だと思う。
以下、読んだところを読み直しながら何回かに分けて自分用にメモを残していこうと思う。
## Ch.2 Lexical Structure
return
, break
or continue
のあとに式が続くときには改行を入れたらダメ。へー。
function sample() { return true; } console.log(sample());
これは return; true;
と解釈されて undefined
になる。
## Ch.3 Types, Values, and Variables
### 3.2 Numbers
- Numberは64-bit floating-point format
- 整数も小数も同じNumberで表されるってことっぽい。へー。
> typeof 4 'number' > typeof 4.5 'number'
- 丸め誤差はある
> .3 - .2 0.09999999999999998 > .2 -.1 0.1
- (あとで調べる) 金額計算とかは特別なライブラリーとかを使うんかな?
- 整数は ±253 − 1 の範囲で正確に表現できる
> Number.MIN_SAFE_INTEGER -9007199254740991 > Number.MAX_SAFE_INTEGER 9007199254740991
- だけど、中には32-bitの整数が使われる処理があることに注意(配列のインデックスとか)
- 大きな整数を扱いたいときは
BigInt
(ES2020)を使う。64-bit整数が利用できる。リテラルはn
を末尾につける。普通の数値と混ぜて計算をすることはできない。だけど、比較は可能。
> typeof 1000n 'bigint' > 100n + 200n 300n > 100n + 200 Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions > 100n > 99 true > 100n == 100 true > 100n === 100 false
NaN
(not-a-number)はどの値ともイコールにならない。NaN
自体ともイコールにならない。NaN
であることを確認するにはNumber.isNaN(x)
を使う。
> let x = NaN undefined > x === NaN false > Number.isNaN(x) true
### 3.3 Text
- char型みたいなのはなくて全部string型
- Immutable
- UTF-16のUnicode character set
- stringはread-only arrayでもあることに注意
- テンプレートリテラル(ES6)はbackticks(`)で。
> let name = "Bill"; `Hello ${ name }.`; 'Hello Bill.'
> let hokke = '𩸽' undefined > hokke.length 2 > hokke[0] '�' > hokke[1] '�' > [...hokke] [ '𩸽' ] > [...hokke][0] '𩸽'
### 3.4 Boolean Values
- 以下の6つの値は falsy values。falseに変換されて、falseのように振る舞う。それ以外はtrueに変換されて、trueのように振る舞うtruthy values。
undefined null 0 -0 NaN ""
### 3. 8 Immutable Primitive Values and Mutable Object References
- Primitive values (undefined, null, booleans, numbers, and strings) はimmutable。また、値で比較する。
- Objectsはmutable。また、値ではなくて参照で比較する。
### 3.10 Variable Declaration and Assignment
const
は定数だけに使う派と、基本的にconst
を使って必要なときだけlet
を使う派があって、著者は前者派。へー。let
とconst
はブロックスコープ
var
について
var
は新しくコードを書くときは使う必要がないけど、古いコードを読むときには出てくるかも。var
はブロックスコープじゃない。深くネストされてたとしても定義された関数がスコープになる。var
が関数の外で使用されている場合は、グローバル変数になる。その場合、let
やconst
と違ってglabalThis
のプロパティになる。
> var x = 1 undefined > globalThis.x 1
let
やconst
と違って、var
は同じ変数を複数回宣言することが可能。var
の宣言は "hoisting" される。var
で宣言された変数はその関数の一番上に持ち上げられる(hoisted)。
### 3.10.3 Destructuring Assignment
ES6のDestructuring Assignmentについて
> let [x, y] = [1, 2] undefined > x 1 > y 2 > [x, y] = [y, x] [ 2, 1 ]
便利だなー
> let [x, ...y] = [1,2,3,4] undefined > x 1 > y [ 2, 3, 4 ]
ホッケもいけるー
> let [first, ...rest] = "𩸽𩸽𩸽𩸽𩸽" undefined > first '𩸽' > rest [ '𩸽', '𩸽', '𩸽', '𩸽' ]
オブジェクトも
> let transparent = {r: 0.0, g: 0.0, b: 0.0, a: 1.0}; undefined > let {r,g,b} = transparent; undefined > r 0
> const {sin, cos, tan} = Math; undefined > sin [Function: sin] > cos [Function: cos] > tan [Function: tan]
あれ?このペースでメモ書きしてたら全然終わらん。けど、ゆっくり覚えられるからいっか。また気が向いたら書こっと。