SlideShare a Scribd company logo
1 of 39
Startup JavaScript
JavaScript ?
Java や C# なら書けるけど…
JavaScriptはちょっと。。
Node.js ? なにそれ ?
もはや何のことだか…
目標
① ECMAScript が 何者 だか 理解できる
② JavaScript の ポイント がつかめる
③ ES5 & ES6 が ちょっと読めるようになる
What is ECMAScript ?
ECMAScriptとは
• JavaScript の標準仕様書
• ECMA International が策定
–メンバーはIT系企業
• Adobe Systems Inc., Google, HP, Hitachi, IBM, Intel,
Konica Minolta, Microsoft, PayPal, Yahoo
• 2015年以降は1年に1度更新が目標
→最新版は ES2016(ES7) (2016/6/17リリース)
仕様書と実装
• 仕様書
–ECMAScript
• 実装
–V8 (Chrome、Opera、Node.js)
–JavaScriptCore (Safari)
–JScript (Internet Explorer)
–Chakra (Edge)
ECMAScriptの参照方法
• Webページで閲覧可能
ECMAScriptの実装状況
• “ECMAScript compatibility table”が便利
→ http://kangax.github.io/compat-table/
ES3 Essentials
目次
• データ型
• 構文
– if
– for
• 関数
データ型
型 typeof サンプルコード
数値 number
文字列 string
論理値 boolean
関数 function
オブジェクト object
配列 object
var num = 100;
var txt = "Hello Worls";
var flag = true;
var method = function () { console.log('Hello'); };
var obj = { id: 10, name: "Sasamiya" };
var arr = [1, 2, 3];
データ型
型 typeof サンプルコード
数値 number
文字列 string
論理値 boolean
関数 function
オブジェクト object
配列 object
var num = 100;
var txt = "Hello Worls";
var flag = true;
var method = function () { console.log('Hello'); };
var obj = { id: 10, name: "Sasamiya" };
var arr = [1, 2, 3];
変数宣言はどんな型でも
“var”
で宣言する
if文
• 論理式を判定して条件分岐ができます
// DOM要素からテキストを取得
var text = document.getElementById("answer").value;
// 取得した文字列を判定
if (text === "金曜日") {
console.log("Thanks god it's friday !");
} else {
console.log("humm...");
}
if文
• 論理式を判定して条件分岐ができます
// DOM要素からテキストを取得
var text = document.getElementById("answer").value;
// 取得した文字列を判定
if (text === "金曜日") {
console.log("Thanks god it's friday !");
} else {
console.log("humm...");
} “==“は近似比較
→null や undefined 、””(空文字)、0 を同値とみなす
“===“は厳密な比較
→null、undefined、””(空文字) 、0 をすべて別物とみなす
for文
• 配列やオブジェクトの中身を順に取り出して走査できます
// 配列を準備
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// 合計を入れる変数
var sum = 0;
// 配列をループする
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
// 結果を表示
console.log(sum); // -> 55
関数
• function演算子で関数を定義できます
// 名前付き関数で宣言する方法
function method1(a, b, c) {
console.log(a + b + c);
}
// 変数に無名関数を代入して宣言する方法
var method2 = function (a, b, c) {
console.log(a + b + c);
};
関数
• function演算子で関数を定義できます
// 名前付き関数で宣言する方法
function method1(a, b, c) {
console.log(a + b + c);
}
// 変数に無名関数を代入して宣言する方法
var method2 = function (a, b, c) {
console.log(a + b + c);
};
変数に代入する方法が
よく見かける書き方
ES5 Essentials
目次
• strictモード
• 配列
– forEach
• JSONオブジェクト
strictモード
• ファイルまたは関数の先頭で宣言することで
曖昧な記述を排除できる
"use strict"
function greet() {
console.log("Hello");
}
function greet() {
"use strict"
console.log("Hello");
}
strictモード
• ファイルまたは関数の先頭で宣言することで
曖昧な記述を排除できる
"use strict"
function greet() {
console.log("Hello");
}
function greet() {
"use strict"
console.log("Hello");
}
ファイル全体に適用されるので
新規作成向き
関数内だけが適用範囲なので
既存に対する修正向き
配列 forEach
• 配列の要素を1個ずつ取り出して処理できる
var arr = [3, 1, 4, 1, 5, 9, 2];
// コンソールに配列の内容を表示する
arr.forEach(function (item, index, array) {
console.log(item);
});
JSONオブジェクト
• JSON文字列とオブジェクトの相互変換ができる
// サーバーから受信した JSONテキスト 等。
var data = '{"id":"123456789","name":"Saya Sasamiya"}';
// parse() で オブジェクト に変換。
var obj = JSON.parse(data);
JSONオブジェクト
• JSON文字列とオブジェクトの相互変換ができる
// クライアント側で作ったデータ
var obj = {
id: '123456789',
name: 'Saya Sasamiya'
};
// JSON文字列に変換 ... → AjaxでサーバーにPOST送信
var data = JSON.stringify(obj);
ES6 Essentials
目次
• 宣言
– const
– let
• 式と演算子
– for ... of 演算子
• 関数
– デフォルト引数
– 残余引数
– アロー関数
const
• 読み取り専用の定数を宣言できる
const MESSAGE = 'Hello World.';
console.log(MESSAGE); // "Hello World."
MESSAGE = 'Hello World !!'; // <-エラーになる
let
• ブロックスコープ内で有効な変数を宣言できる
var msg1 = ‘Hello’;
{
// この{}で囲まれた範囲がブロックスコープ
let msg2 = ‘こんにちは’;
console.log(msg1); // “Hello"
console.log(msg2); // "こんにちは"
}
console.log(msg1); // "Hello"
console.log(msg2); // ERROR
for … of 演算子
• カウント可能なオブジェクトの要素のみを走査できる
var arr = [1, 2, 3];
arr.message = 'Hello World';
for (let item of arr) {
console.log(item);
};
// -> 1, 2, 3
// 'Hello World'; は表示されない
デフォルト引数
• 関数の引数にデフォルト値を設定できる
var getMessage(name = 'tanaka') {
return 'Hello ' + name + '.';
};
var message = getMessage();
console.log(message); // 'Hello tanaka.'
残余引数
• 不特定多数の引数を配列として受け取れる
var log = function (...args) {
console.log(args.join(','));
};
log("host", "status"); // "host,status"
残余引数
• 不特定多数の引数を配列として受け取れる
var log = function (...args) {
console.log(args.join(','));
};
log("host", "status"); // "host,status"
残余引数は配列と同じように扱える
アロー関数
• 無名関数を省略形式で記述できる
(ラムダ式が記述できる)
var hoge = function () {
var self = this;
this.arg = 0;
// ES6より前の古い書き方
window.setInterval(function () {
self.arg += 1;
$('#out').val(self.arg);
}, 1000);
};
var hoge = function () {
this.arg = 0;
// ES6の新しい書き方
window.setInterval(() => {
this.arg += 1;
$('#out').val(this.arg);
}, 1000);
};
アロー関数
• 無名関数を省略形式で記述できる
(ラムダ式が記述できる)
var hoge = function () {
var self = this;
this.arg = 0;
// ES6より前の古い書き方
window.setInterval(function () {
self.arg += 1;
$('#out').val(self.arg);
}, 1000);
};
var hoge = function () {
var self = this;
this.arg = 0;
// ES6の新しい書き方
window.setInterval(() => {
this.arg += 1;
$('#out').val(this.arg);
}, 1000);
};
this のスコープが
外側のスコープに固定される
Summary
まとめ
• ECMAScript は 仕様書
• ES5, ES6 から 以下のような記述ができる
– “use strict”
– forEach / for … of
– JSON
– const, let
– () => {}
Startup JavaScript

More Related Content

What's hot

Play frameworkについて
Play frameworkについてPlay frameworkについて
Play frameworkについて
Shinobu Okano
 
第4回 インフラ勉強会@福岡 Fluentdハンズオン
第4回 インフラ勉強会@福岡 Fluentdハンズオン第4回 インフラ勉強会@福岡 Fluentdハンズオン
第4回 インフラ勉強会@福岡 Fluentdハンズオン
学 松崎
 
Java/phpからのOracle接続(debian)
Java/phpからのOracle接続(debian)Java/phpからのOracle接続(debian)
Java/phpからのOracle接続(debian)
Kimiyuki Yamauchi
 
MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2
学 松崎
 
福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT
学 松崎
 

What's hot (20)

fukinfra Vol3 LT 20120629
fukinfra Vol3 LT 20120629fukinfra Vol3 LT 20120629
fukinfra Vol3 LT 20120629
 
play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西
 
Play frameworkについて
Play frameworkについてPlay frameworkについて
Play frameworkについて
 
第4回 インフラ勉強会@福岡 Fluentdハンズオン
第4回 インフラ勉強会@福岡 Fluentdハンズオン第4回 インフラ勉強会@福岡 Fluentdハンズオン
第4回 インフラ勉強会@福岡 Fluentdハンズオン
 
MSPとしてのオペチー向けReadOnly IAMポリシー
MSPとしてのオペチー向けReadOnly IAMポリシーMSPとしてのオペチー向けReadOnly IAMポリシー
MSPとしてのオペチー向けReadOnly IAMポリシー
 
Play frameworkの概要
Play frameworkの概要Play frameworkの概要
Play frameworkの概要
 
Java/phpからのOracle接続(debian)
Java/phpからのOracle接続(debian)Java/phpからのOracle接続(debian)
Java/phpからのOracle接続(debian)
 
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
 
Nginx
NginxNginx
Nginx
 
MySQL5.7とMariaDB10.1の性能比較(簡易)
MySQL5.7とMariaDB10.1の性能比較(簡易)MySQL5.7とMariaDB10.1の性能比較(簡易)
MySQL5.7とMariaDB10.1の性能比較(簡易)
 
Capistranoで自動デプロイ
Capistranoで自動デプロイCapistranoで自動デプロイ
Capistranoで自動デプロイ
 
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
 
MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slave
 
MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2
 
当社のawsへの取組
当社のawsへの取組当社のawsへの取組
当社のawsへの取組
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 Security
 
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
 
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作ったRuby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
 
福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT
 
形式手法で捗る!インフラ構成の設計と検証
形式手法で捗る!インフラ構成の設計と検証形式手法で捗る!インフラ構成の設計と検証
形式手法で捗る!インフラ構成の設計と検証
 

Similar to Startup JavaScript

20121217 jawsug-yokohama
20121217 jawsug-yokohama20121217 jawsug-yokohama
20121217 jawsug-yokohama
Tetsuya Chiba
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOne
AdvancedTechNight
 

Similar to Startup JavaScript (20)

JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたサーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみた
 
JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました
JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみましたJAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました
JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました
 
JavaScript.Next Returns
JavaScript.Next ReturnsJavaScript.Next Returns
JavaScript.Next Returns
 
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
 
20121217 jawsug-yokohama
20121217 jawsug-yokohama20121217 jawsug-yokohama
20121217 jawsug-yokohama
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
 
モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目
 
JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
フロント作業の効率化
フロント作業の効率化フロント作業の効率化
フロント作業の効率化
 
Eclipse xtext 紹介
Eclipse xtext 紹介Eclipse xtext 紹介
Eclipse xtext 紹介
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOne
 
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 

More from Akinari Tsugo

More from Akinari Tsugo (7)

Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
 
RESTful Web API Design
RESTful Web API DesignRESTful Web API Design
RESTful Web API Design
 
Software Test Monitoring
Software Test MonitoringSoftware Test Monitoring
Software Test Monitoring
 
Software Test Technique
Software Test TechniqueSoftware Test Technique
Software Test Technique
 
Software Test Basic
Software Test BasicSoftware Test Basic
Software Test Basic
 
Node.js Hands-On
Node.js Hands-OnNode.js Hands-On
Node.js Hands-On
 
第8回 業開中心会議 LT 「User Agent の 変遷」
第8回業開中心会議 LT 「User Agent の 変遷」第8回業開中心会議 LT 「User Agent の 変遷」
第8回 業開中心会議 LT 「User Agent の 変遷」
 

Recently uploaded

Recently uploaded (10)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Startup JavaScript