Open matzryo opened 6 years ago
Symbol知らなかった。プリミティブ型。IE11未対応。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol
const WHITE = Symbol('白')
constでも、objのプロパティは変更可能
const obj = {}
// undefined
obj.prop = 123
// 123
obj = {}
// VM219:1 Uncaught TypeError: Assignment to constant variable.
// at <anonymous>:1:5
配列、オブジェクトの最後の要素のあとの","JavaScriptではオーケー。JSONでは禁止されている。
こういう書き方もあり
switch(totalBet) {
case 7; totalBet = funds; break;
case 11; totalBet = 0; break;
case 21; totalBet = 21; break;
}
式は、評価されて値を返す。 式の入れ子も可能
y = x = 3 * 5
y = x = 15
y = 15
15
3 + +'1'
// 4
if文は式ではない。条件演算子は式。
let ret = if (1 === 1) {
123
}
// VM300:1 Uncaught SyntaxError: Unexpected token if
let ret = 1 === 1 ? 123 : null
// undefined
ret
// 123
カンマ演算子。複数式を評価して、最後の式の結果を返す。 dor文で使ったりする。
分割代入。これ、インポートで見たことあるような…
import { Foo, Bar } from 'hoge'
みたいな。
これ、いつかリスト処理で使えるかも
> let [head, ...tail] = [1,2,3]
undefined
> head
1
> tail
[ 2, 3 ]
分割代入で、オプション処理できないかな
> function getSentence({ subject, verb, object}) {
... return `${subject} ${verb} ${object}`
... }
undefined
> getSentence({
... subject: "I",
... verb: "love",
... object: "JavaScript",
... })
'I love JavaScript'
デフォルト引数 ES2015
> function f(a, b = "default", c = 3) {
... return `${a} - ${b} - ${c}`
... }
undefined
> f(5,6,7)
'5 - 6 - 7'
> f(5,6)
'5 - 6 - 3'
> f(5)
'5 - default - 3'
> f()
'undefined - default - 3'
メソッドの省略記法。ES2015 これだったのか、自分が使ってたのは。
call, apply, bindでthis束縛先を指定できる。
関数の周囲にスコープを閉じこむclose。 スコープ外から、あるスコープの変数を参照できる。 え、クロージャは関数というよりブロックとか関数スコープに意識がある?
アクセッサプロパティで、一応アクセス制御できる。こういうのも対応してるんだ。 get set
シンボルプロパティも、抜け道はあるが制御可能。
もっと厳しくやるなら、ウィークマップでクロージャに隠す。
staticでクラスメソッドを定義可能。わかりやすいなあ。
Map。あまり使いみちがわからない。オブジェクトを汚さずにすむ、とあるけど。必要な情報なら汚したいきがするけどなあ。
ウィークマップは、
ウィークマップ。クリアできない。上書きか新規登録のみ?しかも走査できない?
即時関数に入れることで、プライベートなキーを保管できる。これってクロージャ?
イテレータ…RubyのEnumerableみたいだな
フィボナッチ数の生成、ちょっとおもしろい。
ジェネレータ。面白いが、使いどきがわからない。
イテレータのジェネレータなのか?
カリー化、クロージャ、面白い。本番コードで使うときが楽しみ。
Nodeが広まる過程で、エラファースト・コールバックの慣習が生まれた。
3つのファイルを読み込んで処理する、とかだと、ネストが深くなる。エラー処理も面倒。
ジェネレータランナー…難しい。非同期処理を同期的な書き方で書き下せる。
日付操作に便利な、moment.jsというライブラリがある。相対的な時間情報がアバウトでおもしろい。
日時は内部的にはUNIXエポック(1970/1/1)からのミリ秒で表される。
さすがに簡単すぎるか?