MDN Web docs ウェブ開発を学ぶ (JavaScript)
MDNで、JavaScriptの基礎を再確認した時の覚書です。
JavaScript – 動的クライアントサイドスクリプト
JavaScriptの第一歩
- 同期的読込 (デフォルト) async defer
- onclick 属性は使わない
 - HTMLの途中に JavaScriptコードを書かない
 - DOMContentLoaded や </body> タグの直前に script要素を置く対策は、スクリプトの読込と解析がブロックされるため、パフォーマンスに問題がある。deferは、それを解決している。
 - deferは、実行順が保証される。
 
 - FireFoxの開発者ツールでは、JavaScriptの文法エラーに対して、MDNへのリンクページが出る
 typeoftoFixed()小数点以下の丸めNumber()数値型に変更**累乗Math.pow()古い形式
- === !== 型と値の両方を調べる
- == != 値のみ調べる
 
 push() pop() unshift() shift()
JavaScript Building blocks (JavaScriptの構成要素)
- 標準ビルトインオブジェクト
 - スコープは、ループや条件ブロックには適用されない
 sqrt(), cbrt()- イベントリファレンス
- Node.js、Node.js event model、HTTP connect event docs
 - WebExtensions、
runtime.onMessagepage buttononclick, onfocus, onblur, ondblclick, onmouserover, onmouseoutwindow.onkeypress, window.onkeydown, window.onkiup
- イベントハンドラーHTML属性 (インラインイベントハンドラー) は非推奨
 - Document Object Model (DOM) Level 2 Events 仕様 (イベント機構)
 addEventListener(), removeEventListener()推奨- 同じリスナーに複数のハンドラの登録が可能
 - イベントハンドラープロパティ (onClick など) は、IE8でも動く
 canvas.addEventListener('keydown', function(e) {});
 - バブリングとキャプチャリング
- モダンブラウザーのデフォルトでは、全てのイベントハンドラーはバブリング段階に登録される。
 stopPropagation()- How JavaScript Event Delegation Works
 
 data-*任意の属性を要素に付加するe.target.getAttribute('data-color')buttonBar.style.backgroundColor
Introducing JavaScript objects
- オブジェクトリテラル 記号を使って書くオブジェクト
 getter setterプロパティに’_’を付ける- JSONLint
 XMLHttpRequestparse(): JSON文字列を引数に取り、それに対する JavaScript オブジェクトを返します。stringify(): オブジェクトを引数に取り、等価な JSON文字列形式を返します。
Asynchronous JavaScript
wokerは、DOM にアクセスできない- JavaScript の非同期処理
callback(古い)promise(新しい)fetch then catch finallyPromise.all()
async/await- エラー処理は、
try - catchではなく、.then.catch 
- エラー処理は、
 
 - CORS (Cross-Origin Resource Sharing)
 - 特定の時間間隔が経過した後にコードを非同期に実行
setTimeout() setInterval() requestAnimationFrame()clearTimeout()
 document.body.addEventListener- WebRTC
 URL.createObjectURL(古い)
ローカルWebサーバ
- python3 -m http.server
 - python -m SimpleHTTPServer
 - http://localhost:8000
- ドキュメントルートは、コマンドを実行したディレクトリ
 
 
Client-side web APIs
- ブラウザAPI
DOM API- サーバAPI 
XMHHttpReuest, Fetch API - グラフィックスAPI 
Canvas, WebGL - オーディオ・ビデオAPI 
HTMLMediaElement, Web Audio API, WebRTC - デバイス API 
Notification API, Vibration API - ストレージAPI 
Web Storage API, indexedDB API 
 - サードパーティーAPI
 Window, Navigator, documentオブジェクト- Live DOM Viewer
 document.querySelector()document.getElementById(), document.getElementByTagName()は古いやり方
document.createTextNode() appendChild()でテキスト文字を後ろに追加- 要素を複写して追加するのは、
cloneNode() {node}.remove()自身の削除- 古いブラウザでは未サポート
 {node}.parentNode.removeChild({node})
Document.stylesheetsstyle属性 JavaScriptでは、キャメルbackgroundColorで、インラインスタイルでは ハイフンbackground-colorinput.valuefunction(e) {e.target;}fetch()XMLHttpRequest()の代替
canvasのテキストボックスは、左下隅が (0, 0)。他は左上隅。fillText(), strokeText()ctx.translate(width/2, height/2);画面の中心に原点を移動- WebGL API
- サードパーティ Three.js、PlayCanvas、Babylon.js
 
 - HTML 属性リファレンス
 - CSS リファレンス
 - HTMLクイック・リファレンス
 - ブラウザのストレージ制限と立ち退き基準
 - cache API
 
WebGL error
sample の cube表示は、GL_INVALID_OPERATION: texture format does not support mipmap generation. の警告で描画出来ていない。