この章では、これまでに学習したJavaScriptの機能を簡単にまとめ、微妙な点に特に注意を払います。
コード構造
ステートメントはセミコロンで区切られます
alert
(
'Hello'
)
;
alert
(
'World'
)
;
通常、改行も区切り文字として扱われるため、これも機能します
alert
(
'Hello'
)
alert
(
'World'
)
これは「自動セミコロン挿入」と呼ばれます。時にはうまくいかないこともあります。例えば
alert
(
"There will be an error after this message"
)
[
1
,
2
]
.
forEach
(
alert)
ほとんどのコーディングスタイルガイドは、各ステートメントの後にセミコロンを付けることに同意しています。
コードブロック{...}
やループのような構文構造の後には、セミコロンは必要ありません
function
f
(
)
{
// no semicolon needed after function declaration
}
for
(
;
;
)
{
// no semicolon needed after the loop
}
…しかし、どこかに「余分な」セミコロンを置くことができても、それはエラーではありません。無視されます。
詳細:コード構造。
厳格モード
最新のJavaScriptのすべての機能を完全に有効にするには、スクリプトを"use strict"
で始める必要があります。
'use strict'
;
...
このディレクティブは、スクリプトの先頭または関数本体の先頭に配置する必要があります。
"use strict"
がなくても、すべては機能しますが、一部の機能は昔ながらの「互換性のある」方法で動作します。一般的には、最新の動作が推奨されます。
言語のいくつかの最新機能(今後学習するクラスなど)は、暗黙的に厳格モードを有効にします。
変数
を使用して宣言できます
let
const
(定数、変更不可)var
(旧式、後述)
変数名には以下を含めることができます
- 文字と数字。ただし、最初の文字は数字にすることはできません。
- 文字
$
と_
は正常で、文字と同等です。 - ラテンアルファベット以外の文字や象形文字も許可されていますが、一般的には使用されません。
変数は動的に型付けされます。任意の値を格納できます
let
x =
5
;
x =
"John"
;
8つのデータ型があります
- 浮動小数点数と整数の両方に使用する
number
、 - 任意の長さの整数に使用する
bigint
、 - 文字列に使用する
string
、 - 論理値に使用する
boolean
:true/false
、 null
- 「空」または「存在しない」を意味する単一の値null
を持つ型、undefined
- 「割り当てられていない」を意味する単一の値undefined
を持つ型、object
とsymbol
- 複雑なデータ構造と一意の識別子については、まだ学習していません。
typeof
演算子は、値の型を返しますが、2つの例外があります
typeof
null
==
"object"
// error in the language
typeof
function
(
)
{
}
==
"function"
// functions are treated specially
インタラクション
ブラウザを作業環境として使用しているため、基本的なUI関数は次のようになります
prompt(質問, [デフォルト])
質問
をして、訪問者が入力した内容、または「キャンセル」をクリックした場合はnull
を返します。confirm(質問)
質問
をして、OKとキャンセルのどちらかを選択するように提案します。選択はtrue/false
として返されます。alert(メッセージ)
メッセージ
を出力します。
これらの関数はすべて*モーダル*であり、コードの実行を一時停止し、訪問者が回答するまでページとの対話を防ぎます。
例えば
let
userName =
prompt
(
"Your name?"
,
"Alice"
)
;
let
isTeaWanted =
confirm
(
"Do you want some tea?"
)
;
alert
(
"Visitor: "
+
userName )
;
// Alice
alert
(
"Tea wanted: "
+
isTeaWanted )
;
// true
詳細:インタラクション:alert、prompt、confirm。
演算子
JavaScriptは次の演算子をサポートしています
- 算術演算子
-
標準:
* + - /
、剰余の%
、累乗の**
も使用します。二項プラス
+
は文字列を連結します。また、いずれかのオペランドが文字列の場合、もう一方のオペランドも文字列に変換されますalert
(
'1'
+
2
)
;
// '12', string
alert
(
1
+
'2'
)
;
// '12', string
- 代入演算子
-
単純な代入:
a = b
と、a *= 2
のような複合代入があります。 - ビット演算子
-
ビット演算子は、最低レベルのビットレベルで32ビット整数で動作します:必要な場合はドキュメントを参照してください。
- 条件演算子
-
3つのパラメータを持つ唯一の演算子:
cond ? resultA : resultB
。cond
がtruthyの場合、resultA
を返し、そうでない場合はresultB
を返します。 - 論理演算子
-
論理AND
&&
とOR||
は短絡評価を実行し、停止した値(必ずしもtrue
/false
ではありません)を返します。論理NOT!
はオペランドをブール型に変換し、逆の値を返します。 - Null合体演算子
-
??
演算子は、変数のリストから定義された値を選択する方法を提供します。a ?? b
の結果は、a
がnull/undefined
でない限りa
になり、そうでない場合はb
になります。 - 比較演算子
-
異なる型の値の等価チェック
==
は、それらを数値に変換します(null
とundefined
は互いに等しく、他のものとは等しくありません)。そのため、これらは等しくなりますalert
(
0
==
false
)
;
// true
alert
(
0
==
''
)
;
// true
他の比較も同様に数値に変換されます。
厳密等価演算子
===
は変換を行いません。異なる型は常に異なる値を意味します。値
null
とundefined
は特殊です。互いに==
で等しく、他のものとは等しくありません。より大きい/小さい比較は、文字列を文字ごとに比較します。他の型は数値に変換されます。
- その他の演算子
-
カンマ演算子など、他にもいくつかあります。
詳細:基本演算子、数学、比較、論理演算子、Null合体演算子 '??'。
ループ
-
3種類のループについて説明しました
// 1
while
(
condition)
{
...
}
// 2
do
{
...
}
while
(
condition)
;
// 3
for
(
let
i=
0
;
i<
10
;
i++
)
{
...
}
-
for(let...)
ループで宣言された変数は、ループ内でのみ表示されます。ただし、let
を省略して既存の変数を再利用することもできます。 -
ディレクティブ
break/continue
を使用すると、ループ全体/現在の反復を終了できます。ラベルを使用してネストされたループを中断します。
詳細:ループ:whileとfor。
後で、オブジェクトを処理するためのより多くのタイプのループについて学習します。
「switch」構文
「switch」構文は、複数のif
チェックを置き換えることができます。比較には===
(厳密等価)を使用します。
例えば
let
age =
prompt
(
'Your age?'
,
18
)
;
switch
(
age)
{
case
18
:
alert
(
"Won't work"
)
;
// the result of prompt is a string, not a number
break
;
case
"18"
:
alert
(
"This works!"
)
;
break
;
default
:
alert
(
"Any value not equal to one above"
)
;
}
詳細:「switch」ステートメント。
関数
JavaScriptで関数を 생성하는 세 가지 방법에 대해 설명했습니다.
-
関数宣言:メインコードフローの関数
function
sum
(
a
,
b)
{
let
result=
a+
b;
return
result;
}
-
関数式:式のコンテキストでの関数
let
sum
=
function
(
a
,
b)
{
let
result=
a+
b;
return
result;
}
;
-
アロー関数
// expression on the right side
let
sum
=
(
a
,
b)
=>
a+
b;
// or multi-line syntax with { ... }, need return here:
let
sum
=
(
a
,
b)
=>
{
// ...
return
a+
b;
}
// without arguments
let
sayHi
=
(
)
=>
alert
(
"Hello"
)
;
// with a single argument
let
double
=
n
=>
n*
2
;
- 関数にはローカル変数がある場合があります。関数本体またはパラメータリスト内で宣言された変数です。このような変数は、関数内でのみ表示されます。
- パラメータにはデフォルト値を設定できます:
function sum(a = 1, b = 2) {...}
。 - 関数は常に何かを返します。
return
ステートメントがない場合、結果はundefined
になります。
今後の予定
これはJavaScriptの機能の簡単なリストでした。今のところ、基本のみを学習しました。チュートリアルの後半では、JavaScriptのより特殊で高度な機能について説明します。