matzryo / mynotes

自分の学習メモ帳
0 stars 0 forks source link

初めてのJavaScript #7

Open matzryo opened 6 years ago

matzryo commented 6 years ago

さすがに簡単すぎるか?

matzryo commented 6 years ago

Symbol知らなかった。プリミティブ型。IE11未対応。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol

const WHITE = Symbol('白')
matzryo commented 6 years ago

constでも、objのプロパティは変更可能

const obj = {}
// undefined
obj.prop = 123
// 123
obj = {}
// VM219:1 Uncaught TypeError: Assignment to constant variable.
//     at <anonymous>:1:5
matzryo commented 6 years ago

配列、オブジェクトの最後の要素のあとの","JavaScriptではオーケー。JSONでは禁止されている。

matzryo commented 6 years ago

こういう書き方もあり

switch(totalBet) {
  case 7; totalBet = funds; break;
  case 11; totalBet = 0; break;
  case 21; totalBet = 21; break;
}
matzryo commented 6 years ago

式は、評価されて値を返す。 式の入れ子も可能

y = x = 3 * 5
y = x = 15
y = 15
15
matzryo commented 6 years ago
3 + +'1'
// 4
matzryo commented 6 years ago

if文は式ではない。条件演算子は式。

let ret = if (1 === 1) {
    123
}
// VM300:1 Uncaught SyntaxError: Unexpected token if
let ret = 1 === 1 ? 123 : null
// undefined
ret
// 123
matzryo commented 6 years ago

カンマ演算子。複数式を評価して、最後の式の結果を返す。 dor文で使ったりする。

matzryo commented 6 years ago

分割代入。これ、インポートで見たことあるような…

import { Foo, Bar } from 'hoge'

みたいな。

matzryo commented 6 years ago

これ、いつかリスト処理で使えるかも

> let [head, ...tail] = [1,2,3]
undefined
> head
1
> tail
[ 2, 3 ]
matzryo commented 6 years ago

分割代入で、オプション処理できないかな

> function getSentence({ subject, verb, object}) {
... return `${subject} ${verb} ${object}`
... }
undefined
> getSentence({
... subject: "I",
... verb: "love",
... object: "JavaScript",
... })
'I love JavaScript'
matzryo commented 6 years ago

デフォルト引数 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'
matzryo commented 6 years ago

メソッドの省略記法。ES2015 これだったのか、自分が使ってたのは。

matzryo commented 6 years ago

call, apply, bindでthis束縛先を指定できる。

matzryo commented 6 years ago

関数の周囲にスコープを閉じこむclose。 スコープ外から、あるスコープの変数を参照できる。 え、クロージャは関数というよりブロックとか関数スコープに意識がある?

matzryo commented 6 years ago

アクセッサプロパティで、一応アクセス制御できる。こういうのも対応してるんだ。 get set

シンボルプロパティも、抜け道はあるが制御可能。

もっと厳しくやるなら、ウィークマップでクロージャに隠す。

matzryo commented 6 years ago

staticでクラスメソッドを定義可能。わかりやすいなあ。

matzryo commented 6 years ago

Map。あまり使いみちがわからない。オブジェクトを汚さずにすむ、とあるけど。必要な情報なら汚したいきがするけどなあ。

matzryo commented 6 years ago

ウィークマップは、

matzryo commented 6 years ago

ウィークマップ。クリアできない。上書きか新規登録のみ?しかも走査できない?

matzryo commented 6 years ago

即時関数に入れることで、プライベートなキーを保管できる。これってクロージャ?

matzryo commented 6 years ago

イテレータ…RubyのEnumerableみたいだな

matzryo commented 6 years ago

フィボナッチ数の生成、ちょっとおもしろい。

matzryo commented 6 years ago

ジェネレータ。面白いが、使いどきがわからない。

matzryo commented 6 years ago

イテレータのジェネレータなのか?

matzryo commented 6 years ago

カリー化、クロージャ、面白い。本番コードで使うときが楽しみ。

matzryo commented 6 years ago

Nodeが広まる過程で、エラファースト・コールバックの慣習が生まれた。

matzryo commented 6 years ago

3つのファイルを読み込んで処理する、とかだと、ネストが深くなる。エラー処理も面倒。

matzryo commented 6 years ago

ジェネレータランナー…難しい。非同期処理を同期的な書き方で書き下せる。

matzryo commented 6 years ago

日付操作に便利な、moment.jsというライブラリがある。相対的な時間情報がアバウトでおもしろい。

matzryo commented 6 years ago

日時は内部的にはUNIXエポック(1970/1/1)からのミリ秒で表される。