Submit Search
Effective JavaScript Ch.1
44 likes
7,747 views
Teppei Sato
Effective JavaScript 社内勉強会用の資料です。
Technology
Read more
1 of 35
Download now
Downloaded 39 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
More Related Content
ODP
RSpecのここがすごい!
mitim
PPT
Start!! Ruby
mitim
PDF
Tottoruby 20130119
Takashi SAKAGUCHI
PDF
Tips for bash script
Kenta Yamamoto
PPT
クラスのインスタンス変数について
Tomoya Kawanishi
PPT
値渡しと参照渡しの比較
kitoku_magic
PDF
Perl 6 Object-Oliented Programming
risou
PPTX
本当のオブジェクト指向は可読性を上げる
Wataru Terada
RSpecのここがすごい!
mitim
Start!! Ruby
mitim
Tottoruby 20130119
Takashi SAKAGUCHI
Tips for bash script
Kenta Yamamoto
クラスのインスタンス変数について
Tomoya Kawanishi
値渡しと参照渡しの比較
kitoku_magic
Perl 6 Object-Oliented Programming
risou
本当のオブジェクト指向は可読性を上げる
Wataru Terada
Viewers also liked
(17)
PDF
時を超えた JavaScript の道
Teppei Sato
KEY
goog.require()を手書きしていいのは小学生まで
Teppei Sato
PDF
Browser oh browser browser
Teppei Sato
PDF
templateとautoの型推論
MITSUNARI Shigeo
PDF
Emcpp item31
mitsutaka_takeda
PDF
Emcpp item41
mitsutaka_takeda
PPTX
Emcpp0506
Takatoshi Kondo
PDF
Effective Modern C++ 読書会 Item 35
Keisuke Fukuda
PPTX
Effective Modern C++勉強会#4 Item 17, 18資料
Ryo Igarashi
PPTX
Effective modern c++ 5
uchan_nos
PPTX
TypeScriptをオススメする理由
Yusuke Naka
PDF
JavaScript Language Update 2016 (LLoT)
Teppei Sato
PDF
サイボウズの現在と未来
Teppei Sato
PDF
離れた場所でも最高のチームワークを実現する方法 ーサイボウズ開発チームのリモートワーク事例ー
Teppei Sato
PDF
Effective ES6
Teppei Sato
PDF
You Don't Know ES Modules
Teppei Sato
PDF
サイボウズのフロントエンド開発 現在とこれからの挑戦
Teppei Sato
時を超えた JavaScript の道
Teppei Sato
goog.require()を手書きしていいのは小学生まで
Teppei Sato
Browser oh browser browser
Teppei Sato
templateとautoの型推論
MITSUNARI Shigeo
Emcpp item31
mitsutaka_takeda
Emcpp item41
mitsutaka_takeda
Emcpp0506
Takatoshi Kondo
Effective Modern C++ 読書会 Item 35
Keisuke Fukuda
Effective Modern C++勉強会#4 Item 17, 18資料
Ryo Igarashi
Effective modern c++ 5
uchan_nos
TypeScriptをオススメする理由
Yusuke Naka
JavaScript Language Update 2016 (LLoT)
Teppei Sato
サイボウズの現在と未来
Teppei Sato
離れた場所でも最高のチームワークを実現する方法 ーサイボウズ開発チームのリモートワーク事例ー
Teppei Sato
Effective ES6
Teppei Sato
You Don't Know ES Modules
Teppei Sato
サイボウズのフロントエンド開発 現在とこれからの挑戦
Teppei Sato
Ad
Similar to Effective JavaScript Ch.1
(20)
PDF
Kanazawa.js.Next
dynamis
PDF
JavaScriptことはじめ
Yuki Ishikawa
PDF
これからのJavaScriptー関数型プログラミングとECMAScript6
TanUkkii
PDF
JavaScript.Next
dynamis
PPTX
JavaScriptクイックスタート
Shumpei Shiraishi
PDF
JSer Class #1
mizuky fujitani
PDF
JavaScriptの落とし穴
ikdysfm
PPTX
Nds meetup8 lt
ushiboy
PDF
JavaScript入門
Ryo Maruyama
PDF
JavaScript基礎勉強会
大樹 小倉
PPTX
Java scriptの基礎
ManabuYoneyama
PDF
ECMAScript 6 Features(PDF 版)
taskie
PPTX
前期講座08
Takenori Nakagawa
PDF
JavaScript (ECMAScript) 2013
dynamis
PDF
Javascripでオブジェクト指向
1000 VICKY
PPT
[A 3]SSJSでも使える!Javascriptでオブジェクト指向プログラミング入門
Kazunori Tatsuki
PDF
そしてjsの基礎へ戻る#4
Shingo Inoue
PDF
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章
Narimichi Takamura
PDF
JavaScript 講習会 #1
Susisu
PDF
traceur-compilerで ECMAScript6を体験
Toshio Ehara
Kanazawa.js.Next
dynamis
JavaScriptことはじめ
Yuki Ishikawa
これからのJavaScriptー関数型プログラミングとECMAScript6
TanUkkii
JavaScript.Next
dynamis
JavaScriptクイックスタート
Shumpei Shiraishi
JSer Class #1
mizuky fujitani
JavaScriptの落とし穴
ikdysfm
Nds meetup8 lt
ushiboy
JavaScript入門
Ryo Maruyama
JavaScript基礎勉強会
大樹 小倉
Java scriptの基礎
ManabuYoneyama
ECMAScript 6 Features(PDF 版)
taskie
前期講座08
Takenori Nakagawa
JavaScript (ECMAScript) 2013
dynamis
Javascripでオブジェクト指向
1000 VICKY
[A 3]SSJSでも使える!Javascriptでオブジェクト指向プログラミング入門
Kazunori Tatsuki
そしてjsの基礎へ戻る#4
Shingo Inoue
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章
Narimichi Takamura
JavaScript 講習会 #1
Susisu
traceur-compilerで ECMAScript6を体験
Toshio Ehara
Ad
More from Teppei Sato
(16)
PDF
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Teppei Sato
PDF
サイボウズの給与交渉戦 - Boss Side -
Teppei Sato
PDF
Recent compat-table issues
Teppei Sato
PDF
kintoneがAWSで目指すDevOpsQAな開発
Teppei Sato
PDF
Automated Dependency Updates with Renovate
Teppei Sato
PDF
君はyarn.lockをコミットしているか?
Teppei Sato
PDF
サイボウズの開発を支えるKAIZEN文化
Teppei Sato
PDF
SPAと覚悟
Teppei Sato
PDF
Closure Compiler Updates for ES6
Teppei Sato
PDF
ES6 in Practice
Teppei Sato
PDF
Our wish to Flowtype
Teppei Sato
PDF
Flowtype Introduction
Teppei Sato
PDF
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Teppei Sato
PDF
本当のClosure Compilerをお見せしますよ。
Teppei Sato
PDF
DockerがYAVAY!
Teppei Sato
PDF
JavaScript Unit Test Why? What? How?
Teppei Sato
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Teppei Sato
サイボウズの給与交渉戦 - Boss Side -
Teppei Sato
Recent compat-table issues
Teppei Sato
kintoneがAWSで目指すDevOpsQAな開発
Teppei Sato
Automated Dependency Updates with Renovate
Teppei Sato
君はyarn.lockをコミットしているか?
Teppei Sato
サイボウズの開発を支えるKAIZEN文化
Teppei Sato
SPAと覚悟
Teppei Sato
Closure Compiler Updates for ES6
Teppei Sato
ES6 in Practice
Teppei Sato
Our wish to Flowtype
Teppei Sato
Flowtype Introduction
Teppei Sato
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Teppei Sato
本当のClosure Compilerをお見せしますよ。
Teppei Sato
DockerがYAVAY!
Teppei Sato
JavaScript Unit Test Why? What? How?
Teppei Sato
Effective JavaScript Ch.1
1.
Effective JavaScript
第1章 @teppeis 2013/04/01 サイボウズ社内勉強会
2.
ファーストクラスの関数と、 オブジェクトプロトタイプという、 2つの大きな目標は別として、 そういう実現困難な要求と、 すさまじく加熱したスケジュールに対して、 僕が採用したソリューションは、 JavaScriptを最初から 極度に柔軟なものにしておくことだった。
∼ブレンダン・アイクによる序文∼ より
3.
極度に 柔軟!
4.
JavaScriptは言語でできる ことをやりたい放題やるとチー ム開発とか絶対無理だよ。 規律を持って開発しましょう。 => Effective JavaScript!
5.
余談 • 類書に『JavaScript: The
Good Parts』というのがあってこれも良い 本だけど、原理主義すぎて盲信すると 副作用があります。いろいろ分かって から読むとニヤニヤできる。 • 『Effective JavaScript』の方は 安心して参考にできるプラクティスを 収録している印象です。
6.
第1章 JavaScriptに慣れ親しむ
7.
項目1
どのJavaScriptを 使っているのかを意識しよう
8.
JavaScriptの歴史 • ECMAScirpt
3 <= IE8- • ECMAScript 4 <= 黒歴史 • ECMAScript 5 <= モダンブラウザ • ECMAScript 6 <= 策定中
9.
ES3とES5 • 実際使うときによく間違えるのが、 Arrayのメソッドとか。
ES3にはmapとかfilerとかないよ。 • ES5 compatibility tableで確認で きる。 http://kangax.github.com/es5-compat-table/
10.
strictモード
function hoge() { "use strict"; // something... }
11.
strictモード • いろいろstrictになる。
• 最近は割と常識になってきた。 • 参考: • Strict モード - JavaScript ¦ MDN https://developer.mozilla.org/ja/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode • arguments.calleeがstrictモードで禁止な理由 - Togetter http://togetter.com/li/215907 • function - Why was the arguments.callee.caller property deprecated in JavaScript? - Stack Overflow http://stackoverflow.com/questions/103598/why-was-the-arguments-callee-caller-property-deprecated-in-javascript
12.
ファイル連結に注意
"use strict"; function strictFunc() { // strict code... } function nonStrictFunc() { // non-‐strict code... } • 連結したらどっちもstrict 逆に連結したらどちらもnon-strict • 即時関数で囲んで use strict しよう
13.
Closure的には? • DEBUGモードではgoog.base()な
どでarguments.callee使ってて strictモードでは動かない。 • gjslint, Closure Compilerでほと んど検出できるので、Closure世界で はstrictモードにしない。
14.
項目2 JavaScriptの浮動小数点を
理解しよう
15.
number • JSの数は倍精度浮動小数点数。 • JSにおける整数はダブルの部分集合。 •
ビット演算は、数値を32ビット符号付 き整数として扱う。 8 | 1 // 9 • 浮動小数点演算の精度に注意
16.
項目3 暗黙の型変換に注意しよう
17.
型変換 • 型エラーは暗黙の型強制で隠される • +演算子は、引数の型によって、数の加
算か文字列の連結のどちらかになる 3 + true // 4 "hoge:" + true // "hoge:true" (1 + 2) + "3" // "33" 1 + (2 + "3") // "123"
18.
NaN is not
NaN • isNaNは型強制してしまうので、 数値型以外には使えない! var str = "hoge"; isNaN(str); // true! • 「それ自身と等しくない」性質を使おう var a = NaN; a !== a; // true!
19.
未定義チェックは要注意 function do(num,
str) { // デフォルト値を設定するときによく見るコード // このままだとnum = 0やstr = ""を指定できない! num = num || 10; str = str || "default string"; // ... } // 正攻法 if (typeof num === 'undefined') { num = 10; } // null or undefinedのチェックはこれがオススメ if (num == null) { num = 10; }
20.
Falsy value in
JS • false • +0, -0 • (empty string) • NaN • null • undefined • 他はすべてtrueです。
21.
項目4 オブジェクトラッパーよりも プリミティブが好ましい
22.
プリミティブ型 • boolean • number •
string • null • undefined
23.
オブジェクトラッパー • オブジェクトラッパーは、等値演算子 (===)で比較されたときプリミティブ
値と同じ振る舞いをしない。 var s = new String('hello'); typeof s; // 'object' not 'string' s === 'hello'; // false s == 'hello'; // true var s2 = new String('hello'); s === s2; // false s == s2; // false
24.
オブジェクトラッパー • プリミティブのプロパティを取得ある いは設定すると、オブジェクトラッパ
ーが暗黙のうちに作成される。 "hello".toUpperCase(); // "HELLO" "hello".hoge = 1; "hello".hoge; // undefined (123).toString(); // '123' 123..toString(); // '123'
25.
項目5 型が異なるときに ==を使わない
26.
==演算子 • ==演算子は、引数の型が異なるとき、
分かりにくい暗黙の強制を適用される "1.0e0" == {valueOf: function() {return true;}} // true だけど、頭がいたくなる。。 • valueOfとかtoStringとかDateだ け違うとか、おおよそ人間には理解で きないルールが存在する。 http://os0x.hatenablog.com/entry/20100916/1284650917 http://d.hatena.ne.jp/sandai/20100916/p1
27.
===演算子使おう • ===演算子を使えば、比較に暗黙の強 制が関わらないことを明示できる。 •
型の異なる値を比較するときは、 明示的な型変換を自分で行うこと。
28.
項目6 セミコロン挿入の限度を学ぼう
29.
セミコロン;自動挿入ルール • 厳密には結構むずい。 a
= b /hoge/i.test(str) // a = b / hoge / i.test(str) // 自動挿入されないので正規表現が割り算に! • returnのあとに改行しちゃいけないこ とだけは覚えておこう。
30.
セミコロンの省略 • セミコロンの省略はするな(超意訳) 省略したければCoffee使え。 •
スクリプトを連結による意図しない セミコロン自動挿入に注意。 // 先頭に;を置いて連結ミスを防ぐテクニック ;(function() { // .. })();
31.
項目7 文字列は16ビットの
符号単位を並べた シーケンスとして考えよう
32.
文字列とUnicode • JavaScriptの文字列は、Unicode
の符号位置(code point)ではなく、 16ビットの符号単位(code unit) • code point が2^16未満のときは、 普通に文字列操作できますが。
33.
サロゲートペア • code point
が2^16以上のとき、 1対の符号単位(サロゲートペア)で表現 • サロゲートペアは length, charAt, charCodeAt や正規表現に影響する // " ": U+20BB7 // http://www.fileformat.info/info/unicode/char/20bb7/index.htm " ".length; // 2 " ".charCodeAt(0).toString(16); // "d842" " ".charCodeAt(1).toString(16); // "dfb7"
34.
サロゲートペア • 文字列を扱うサードパーティライブラ リには要注意。 •
開発してるアプリがサロゲートペア対 応するのか、対応してないならどんな 挙動になるのか、気をつけましょう。
35.
第1章 完
Download