From b876da98210e9aab705d7f0373cee06b76f62e1b Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Thu, 20 May 2021 00:35:45 +0900 Subject: 20210508-Web/JavaScript/Guide/Expressions_and_Operators (#788) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 2021/04/28 時点の英語版に同期 - 原語併記マクロを削除 --- .../guide/expressions_and_operators/index.html | 1088 ++++++++++---------- 1 file changed, 544 insertions(+), 544 deletions(-) (limited to 'files') diff --git a/files/ja/web/javascript/guide/expressions_and_operators/index.html b/files/ja/web/javascript/guide/expressions_and_operators/index.html index 884497548c..22807dccf6 100644 --- a/files/ja/web/javascript/guide/expressions_and_operators/index.html +++ b/files/ja/web/javascript/guide/expressions_and_operators/index.html @@ -7,13 +7,13 @@ tags: - Guide - JavaScript - Operators - - 'l10n:priority' + - l10n:priority - 演算子 translation_of: Web/JavaScript/Guide/Expressions_and_Operators ---
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Functions", "Web/JavaScript/Guide/Numbers_and_dates")}}
-

この章では 代入、比較、算術、ビット、論理、文字列、三項演算子などに関わる JavaScript の式 (expression) や演算子 (operator) について説明しています。

+

この章では JavaScript の式 (expression) や演算子 (operator) について、代入、比較、算術、ビット、論理、文字列、三項演算子などを説明しています。

演算子と式について網羅した詳しいリストはリファレンスでもご覧いただけます。

@@ -22,167 +22,163 @@ translation_of: Web/JavaScript/Guide/Expressions_and_Operators

JavaScript では以下の種類の演算子を使用できます。この節では演算子の優先順位についての説明も含めて演算子について説明します。

-

JavaScript は二項演算子単項演算子を実装しており、さらには三項演算子や条件演算子も実装しています。二項演算子は以下のような形で演算子 (operator) を一つ、その前後となるようにオペランド (operand) が二つ必要となります。

+

JavaScript は二項演算子単項演算子を実装しており、さらには特殊な三項演算子である条件演算子も実装しています。二項演算子は以下のような形で演算子 (operator) を一つ、その前後となるようにオペランド (operand) が二つ必要となります。

-
operand1 operator operand2
+
operand1 operator operand2
 

例えば 3+4x*y です。

単項演算子は演算子の前後いずれかに、一つのオペランドが必要です。

-
operator operand
+
operator operand
+

もしくは

-
operand operator
+
operand operator
+

例えば x++++x です。

-

代入演算子

+

代入演算子

-

代入演算子は右オペランドの値を元に、左のオペランドへ値を代入するものです。簡単なものでは equal (=) があり、右オペランドの値を左オペランドへ代入します。つまり、x = y では y の値を x へ代入することになります。

+

代入演算子は右オペランドの値を元に、左のオペランドへ値を代入するものです。簡単なものではイコール (=) があり、右オペランドの値を左オペランドへ代入します。つまり、 x = y では y の値を x へ代入することになります。

次の表にまとめられているように演算子を省略した複合代入演算子というものもあります。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
複合代入演算子
名称略記演算子意味
代入x = yx = y
加算代入x += yx = x + y
減算代入x -= yx = x - y
乗算代入x *= yx = x * y
除算代入x /= yx = x / y
剰余代入x %= yx = x % y
べき乗代入x **= yx = x ** y
左シフト代入x <<= yx = x << y
右シフト代入x >>= yx = x >> y
符号なし右シフト代入x >>>= yx = x >>> y
ビット論理積 (AND) 代入x &= yx = x & y
ビット排他的論理和 (XOR) 代入x ^= yx = x ^ y
ビット論理和 (OR) 代入x |= yx = x | y
論理積代入x &&= yx && (x = y)
論理和代入x ||= yx || (x = y)
Null 合体代入x ??= yx ?? (x = y)
複合代入演算子
名称略記演算子意味
代入x = yx = y
加算代入x += yx = x + y
減算代入x -= yx = x - y
乗算代入x *= yx = x * y
除算代入x /= yx = x / y
剰余代入x %= yx = x % y
べき乗代入x **= yx = x ** y
左シフト代入x <<= yx = x << y
右シフト代入x >>= yx = x >> y
符号なし右シフト代入x >>>= yx = x >>> y
ビット論理積 (AND) 代入x &= yx = x & y
ビット排他的論理和 (XOR) 代入x ^= yx = x ^ y
ビット論理和 (OR) 代入x |= yx = x | y
論理積代入x &&= yx && (x = y)
論理和代入x ||= yx || (x = y)
Null 合体代入x ??= yx ?? (x = y)
-

戻り値と連鎖

+

返値と連鎖

-

ほとんどの式と同様に、x = y のような代入には戻り値があります。戻り値は式の代入やロギング等により取得することができます。

+

ほとんどの式と同様に、 x = y のような代入には返値があります。返値は式の代入やロギング等により取得することができます。

-
const z = (x = y); // 右記と等価 const z = x = y;
+
const z = (x = y); // const z = x = y; と等価
 
-console.log(z); // 代入 x = y の戻り値をログする。
-console.log(x = y); // または、戻り値を直接ログする。
+console.log(z); // 代入 x = y の返値をログする。 +console.log(x = y); // または、返値を直接ログする。
-

戻り値は上の表の「意味」列の = 記号の右側の式と一致します。つまり (x = y)y を返し、(x += y) は加算 x + y の結果を返し、(x **= y) はべき乗 x ** y の結果を返します。

+

返値は上の表の「意味」列の = 記号の右側の式と一致します。つまり (x = y)y を返し、(x += y) は加算 x + y の結果を返し、 (x **= y) はべき乗 x ** y の結果を返します。

-

論理代入、(x &&= y)(x ||= y) および (x ??= y) の場合、戻り値は代入を除いた論理演算の結果であり、それぞれ x && yx || y および x ?? y を返します。

+

論理代入、(x &&= y)(x ||= y) および (x ??= y) の場合、返値は代入を除いた論理演算の結果であり、それぞれ x && yx || y および x ?? y を返します。

-

戻り値は常に演算のオペランドの値に基づくことに注意してください。

+

返値は常に演算のオペランドの値に基づくことに注意してください。

これらの式を連鎖させると、それぞれの代入は右から左に評価されます。以下の例で考えてみましょう。

-

分割代入

+

分割代入

より複雑な代入方法、分割代入構文は、配列やオブジェクトのリテラル構造を反映した構文を用いて、配列やオブジェクトからデータを抽出することができる JavaScript の式です。

- - - - -
var foo = ['one', 'two', 'three'];
+
var foo = ['one', 'two', 'three'];
 
 // 分割を行わない代入
 var one   = foo[0];
@@ -192,320 +188,321 @@ var three = foo[2];
 // 分割代入
 var [one, two, three] = foo;
-

比較演算子

+

比較演算子

-

比較演算子は被演算子を比較して、その結果が真であるかに基づいて論理値を返します。被演算子には数値、文字列、論理値、オブジェクトを使用できます。文字列は Unicode を用い、標準的な辞書順に基づいて比較されます。ほとんどの場合、2 つの被演算子が異なる型ならば JavaScript はその被演算子を比較に適した型に変換しようとします。こうした挙動により、一般的に被演算子は数値的に比較される結果となります。このルールの唯一の例外は === および !== で、これらは「厳密に」等値か否かを判断し、等値性をチェックする前に被演算子を適合する型に変換しません。次の表では、以下のサンプルコードで定義された変数を前提として比較演算子を説明していきます。

+

比較演算子はオペランドを比較して、その結果が真であるかに基づいて論理値を返します。オペランドには数値、文字列、論理値、オブジェクトを使用できます。文字列は Unicode を用い、標準的な辞書順に基づいて比較されます。ほとんどの場合、2 つのオペランドが異なる型ならば JavaScript はそのオペランドを比較に適した型に変換しようとします。こうした挙動により、一般的にオペランドは数値的に比較される結果となります。このルールの唯一の例外は === および !== で、これらは「厳密に」等値か否かを判断し、等値性をチェックする前にオペランドを適合する型に変換しません。次の表では、以下のサンプルコードで定義された変数を前提として比較演算子を説明していきます。

-
var var1 = 3;
+
var var1 = 3;
 var var2 = 4;
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
比較演算子
演算子説明true を返す例
等価 (==)被演算子が等しい場合に true を返します。3 == var1 -

"3" == var1

- 3 == '3'
不等価 (!=)被演算子が等しくない場合に true を返します。var1 != 4
- var2 != "3"
厳密等価 (===)被演算子が等しく、かつ同じ型である場合に true を返します。{{jsxref("Object.is")}} や JavsScript での等価も参照してください。3 === var1
厳密不等価 (!==)被演算子が等しくなく、かつ/または同じ型でない場合に true を返します。var1 !== "3"
- 3 !== '3'
より大きい (>)左の被演算子が右の被演算子よりも大きい場合に true を返します。var2 > var1
- "12" > 2
以上 (>=)左の被演算子が右の被演算子以上である場合に true を返します。var2 >= var1
- var1 >= 3
より小さい (<)左の被演算子が右の被演算子よりも小さい場合に true を返します。var1 < var2
- "2" < 12
以下 (<=)左の被演算子が右の被演算子以下である場合に true を返します。var1 <= var2
- var2 <= 5
比較演算子
演算子説明true を返す例
等価 (==)オペランドが等しい場合に true を返します。3 == var1 +

"3" == var1

+ 3 == '3'
不等価 (!=)オペランドが等しくない場合に true を返します。var1 != 4
+ var2 != "3"
厳密等価 (===)オペランドが等しく、かつ同じ型である場合に true を返します。{{jsxref("Object.is")}} や JavsScript での等価も参照してください。3 === var1
厳密不等価 (!==)オペランドが等しくなく、かつ/または同じ型でない場合に true を返します。var1 !== "3"
+ 3 !== '3'
より大きい (>)左のオペランドが右のオペランドよりも大きい場合に true を返します。var2 > var1
+ "12" > 2
以上 (>=)左のオペランドが右のオペランド以上である場合に true を返します。var2 >= var1
+ var1 >= 3
より小さい (<)左のオペランドが右のオペランドよりも小さい場合に true を返します。var1 < var2
+ "2" < 12
以下 (<=)左のオペランドが右のオペランド以下である場合に true を返します。var1 <= var2
+ var2 <= 5
-

メモ: (=>) は演算子ではなく、アロー関数を表す記法です。

+

メモ: (=>) は演算子ではなく、アロー関数を表す記法です。

-

算術演算子

+

算術演算子

-

算術演算子は被演算子として数値(リテラルまたは変数)をとり、1 つの数値を返します。標準的な算術演算子は、加算 (+)、減算 (-)、乗算 (*)、除算 (/) です。これらの演算子は、他のほとんどのプログラミング言語で浮動小数点数を用いた場合と同じように機能します(特に、0 で除算をすると {{jsxref("Infinity")}} になることに注意してください)。例えば以下のようになります。

+

算術演算子はオペランドとして数値 (リテラルまたは変数) をとり、1 つの数値を返します。標準的な算術演算子は、加算 (+)、減算 (-)、乗算 (*)、除算 (/) です。これらの演算子は、他のほとんどのプログラミング言語で浮動小数点数を用いた場合と同じように機能します (特に、0 で除算をすると {{jsxref("Infinity")}} になることに注意してください)。例えば以下のようになります。

-
1 / 2; // 0.5
+
1 / 2; // 0.5
 1 / 2 == 1.0 / 2.0; // true になります
 
-

標準的な算術演算子に加え、さらに JavaScript では、以下の表で示す算術演算子も使用できます。

+

標準的な算術演算子 (+, -, + *, /) に加え、さらに JavaScript では、以下の表で示す算術演算子も使用できます。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
算術演算子
演算子説明
剰余 (%)二項演算子です。2 つの被演算子で除算したときの、整数の余りを返します。12 % 5 は 2 を返します。
インクリメント (++)単項演算子です。被演算子に 1 を加えます。前置演算子 (++x) として用いると、被演算子に 1 を加えた後にその値を返します。後置演算子 (x++) として用いると、被演算子に 1 を加える前にその値を返します。x が 3 の場合、++xx に 4 を設定して 4 を返します。一方、x++ は 3 を返したあと x に 4 を設定します。
デクリメント (--)単項演算子です。被演算子から 1 を引きます。戻り値はインクリメント演算子のものと同様です。x が 3 の場合、--xx に 2 を設定して 2 を返します。一方、x-- は 3 を返したあと x に 2 を設定します。
単項符号反転 (-)単項演算子です。被演算子の符号を反転して、その値を返します。x が 3 のとき、-x は -3 を返します。
単項プラス (+)単項演算子です。数値でない被演算子の数値への変換を試みます。+"3"3 を返します。
- +true1 を返します。
べき乗演算子 (**) {{experimental_inline}}基数部指数部乗したものを計算します、つまり、基数部指数部 となります。2 ** 38 を返します。
- 10 ** -10.1 を返します。
算術演算子
演算子説明
剰余 (%)二項演算子です。2 つのオペランドで除算したときの、整数の余りを返します。12 % 5 は 2 を返します。
インクリメント (++)単項演算子です。オペランドに 1 を加えます。前置演算子 (++x) として用いると、オペランドに 1 を加えた後にその値を返します。後置演算子 (x++) として用いると、オペランドに 1 を加える前にその値を返します。x が 3 の場合、++xx に 4 を設定して 4 を返します。一方、x++ は 3 を返したあと x に 4 を設定します。
デクリメント (--)単項演算子です。オペランドから 1 を引きます。返値はインクリメント演算子のものと同様です。x が 3 の場合、--xx に 2 を設定して 2 を返します。一方、x-- は 3 を返したあと x に 2 を設定します。
単項符号反転 (-)単項演算子です。オペランドの符号を反転して、その値を返します。x が 3 のとき、-x は -3 を返します。
単項プラス (+)単項演算子です。数値でないオペランドの数値への変換を試みます。+"3"3 を返します。
+ +true1 を返します。
べき乗演算子 (**) {{experimental_inline}}基数部指数部乗したものを計算します、つまり、基数部指数部 となります。2 ** 38 を返します。
+ 10 ** -10.1 を返します。
-

ビット演算子

+

ビット演算子

-

ビット演算子はその被演算子を 10進数や 16進数や 8進数ではなく、32 個のビットの集合(0 と 1)として扱います。例えば、10進数の 9 の 2進表現は 1001 です。ビット演算子はこのように 2進表現にした上で演算を行いますが、JavaScript において標準的な 10進数表現の数値を返します。

+

ビット演算子はそのオペランドを 10 進数や 16 進数や 8 進数ではなく、 32 個のビットの集合 (0 と 1) として扱います。例えば、 10 進数の 9 の 2進表現は 1001 です。ビット演算子はこのように 2 進表現にした上で演算を行いますが、JavaScript において標準的な 10 進数表現の数値を返します。

次の表は JavaScript のビット演算子の概要です。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ビット演算子
演算子使用法説明
ビット論理積 (AND)a & b被演算子の対応するビットがともに 1 である各ビットについて 1 を返します。
ビット論理和 (OR)a | b被演算子の対応するビットがともに 0 である各ビットについて 0 を返します。
ビット排他的論理和 (XOR)a ^ b被演算子の対応するビットが同じ各ビットについて 0 を返します。
- [被演算子の対応するビットが異なる各ビットについて 1 を返します。]
ビット否定 (NOT)~ a被演算子の各ビットを反転します。
左シフトa << b -

2進表現の ab ビット分だけ左にシフトします。右から 0 で詰めます。

-
符号維持右シフトa >> b2進表現の ab ビット分だけ右にシフトします。溢れたビットは破棄します。
ゼロ埋め右シフトa >>> b2進表現の ab ビット分だけ右にシフトします。溢れたビットは破棄し、左から 0 で詰めます。
ビット演算子
演算子使用法説明
ビット論理積 (AND)a & bオペランドの対応するビットがともに 1 である各ビットについて 1 を返します。
ビット論理和 (OR)a | bオペランドの対応するビットがともに 0 である各ビットについて 0 を返します。
ビット排他的論理和 (XOR)a ^ bオペランドの対応するビットが同じ各ビットについて 0 を返します。
+ [オペランドの対応するビットが異なる各ビットについて 1 を返します。]
ビット否定 (NOT)~ aオペランドの各ビットを反転します。
左シフトa << b +

2 進表現の ab ビット分だけ左にシフトします。右から 0 で詰めます。

+
符号維持右シフトa >> b2 進表現の ab ビット分だけ右にシフトします。溢れたビットは破棄します。
ゼロ埋め右シフトa >>> b2 進表現の ab ビット分だけ右にシフトします。溢れたビットは破棄し、左から 0 で詰めます。
-

ビット論理演算子

+

ビット論理演算子

概念上、ビット論理演算子は以下のように機能します。

    -
  • 被演算子の値は 32 ビットの整数に変換され、0 もしくは 1 からなるビット列として表現されます。32 ビットを超える数値は、32 ビットを超えた部分が捨てられます。次の例では、32 ビットを超える整数が、32 ビットの整数に変換されています。 -
    変換前: 11100110111110100000000000000110000000000001
    -変換後:               10100000000000000110000000000001
    +
  • オペランドの値は 32 ビットの整数に変換され、0 もしくは 1 からなるビット列として表現されます。32 ビットを超える数値は、32 ビットを超えた部分が捨てられます。次の例では、32 ビットを超える整数が、32 ビットの整数に変換されています。 +
    変換前: 1110 0110 1111 1010 0000 0000 0000 0110 0000 0000 0001
    +変換後:                1010 0000 0000 0000 0110 0000 0000 0001
  • -
  • 第1被演算子の各ビットは第2被演算子の対応する各ビットと対になります。第1 ビットと第1 ビット、第2 ビットと第2 ビット、以下同様に。
  • +
  • 第 1 オペランドの各ビットは第 2 オペランドの対応する各ビットと対になります。第 1 ビットと第 1 ビット、第 2 ビットと第 2 ビット、以下同様に。
  • 演算子は各ビットのペアに適用され、結果はビットごとに構成されます。
-

例えば 9 の 2進表現は 1001 で、15 の 2進表現は 1111 です。したがって、ビット演算子がこれらの値に適用されたときの結果は以下のようになります。

+

例えば 9 の 2 進表現は 1001 で、15 の 2 進表現は 1111 です。したがって、ビット演算子がこれらの値に適用されたときの結果は以下のようになります。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ビット演算子の例
演算式結果2進数での説明
15 & 991111 & 1001 = 1001
15 | 9151111 | 1001 = 1111
15 ^ 961111 ^ 1001 = 0110
~15-16~00000000...00001111 = 11111111...11110000
~9-10~00000000...00001001 = 11111111...11110110
ビット演算子の例
演算式結果2 進数での説明
15 & 991111 & 1001 = 1001
15 | 9151111 | 1001 = 1111
15 ^ 961111 ^ 1001 = 0110
~15-16~ 0000 0000 ... 0000 1111 = 1111 1111 ... 1111 0000
~9-10~ 0000 0000 ... 0000 1001 = 1111 1111 ... 1111 0110
-

ビット否定演算子を使うと 32 ビットすべてが反転し、その値の最上位(最左)ビットは負数を表す 1 に設定される(2 の補数表現)ことに注意してください。~x-x - 1 と同じ値に評価されます。

+

ビット否定演算子を使うと 32 ビットすべてが反転し、その値の最上位 (最も左の) ビットは (2 の補数表現で) 負数を表す 1 に設定されることに注意してください。 ~x-x - 1 と同じ値に評価されます。

-

ビットシフト演算子

+

ビットシフト演算子

-

ビットシフト演算子は 2 つの被演算子をとります。第1被演算子はシフトされる数を指定し、第2被演算子は、第1被演算子をシフトさせるビット数を指定します。シフト演算の方向は使用する演算子によって決まります。

+

ビットシフト演算子は 2 つのオペランドをとります。第 1 オペランドはシフトされる数を指定し、第 2 オペランドは、第 1 オペランドをシフトさせるビット数を指定します。シフト演算の方向は使用する演算子によって決まります。

-

シフト演算子はその被演算子を 32 ビット整数に変換し、左の被演算子と同じ型で結果を返します。

+

シフト演算子はそのオペランドを 32 ビット整数に変換し、結果を {{jsxref("Number")}} または {{jsxref("BigInt")}} のどちらかで返します。特に、左のオペランドの型が {{jsxref("BigInt")}} であった場合、 {{jsxref("BigInt")}} を返します。それ以外の場合は {{jsxref("Number")}} を返します。

シフト演算子の種類は次表のとおりです。

- - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + +
ビットシフト演算子
演算子説明
左シフト
- (<<)
この演算子は、第1被演算子を指定したビット数分だけ左にシフトします。左に溢れたビットは破棄されます。0 のビットを右から詰めます。9<<2 の結果は 36 になります。1001 を 2 ビット左にシフトすると 100100 になり、これは 36 となるからです。
符号維持右シフト (>>)この演算子は、第1被演算子を指定したビット数分だけ右にシフトします。右に溢れたビットは破棄されます。左端のビットのコピーを左から詰めます。9>>2 の結果は 2 になります。1001 を 2 ビット右にシフトすると 10 であり、これは 2 となるからです。同様に、-9>>2 の結果は、符号が維持されるため -3 になります。
ゼロ埋め右シフト (>>>)この演算子は、第1被演算子を指定したビット数分だけ右にシフトします。右に溢れたビットは破棄されます。0 のビットを左から詰めます。19>>>2 の結果は 4 になります。10011 を 2 ビット右にシフトすると 100 になり、これは 4 となるからです。非負数では、0 埋め右シフトと符号を維持した右シフトは同じ結果になります。
ビットシフト演算子
演算子説明
左シフト
+ (<<)
この演算子は、第 1 オペランドを指定したビット数分だけ左にシフトします。左に溢れたビットは破棄されます。0 のビットを右から詰めます。9<<2 の結果は 36 になります。1001 を 2 ビット左にシフトすると 100100 になり、これは 36 となるからです。
符号維持右シフト (>>)この演算子は、第 1 オペランドを指定したビット数分だけ右にシフトします。右にあふれたビットは破棄されます。左端のビットのコピーを左から入れます。9>>2 の結果は 2 になります。1001 を 2 ビット右にシフトすると 10 であり、これは 2 となるからです。同様に、-9>>2 は符号が維持されるため -3 になります。
ゼロ埋め右シフト (>>>)この演算子は、第 1 オペランドを指定したビット数分だけ右にシフトします。右に溢れたビットは破棄されます。0 のビットを左から詰めます。19>>>2 の結果は 4 になります。10011 を 2 ビット右にシフトすると 100 になり、これは 4 となるからです。非負数では、0 埋め右シフトと符号を維持した右シフトは同じ結果になります。
-

論理演算子

+

論理演算子

-

論理演算子では、基本的に{{原語併記("ブール値","Boolean value")}}(論理)値を用います。つまりブール値を取ると、ブール値を返します。しかし && および || 演算子については、実際には指定された被演算子の一方の値を返します。そのため、非ブール値とともに論理演算子が使われた場合、非ブール値を返す可能性があります。次表で論理演算子について説明します。

+

論理演算子では、基本的にブール値 (論理値) を用います。その場合は論理値を返します。しかし、 && および || 演算子については、実際には指定されたオペランドの一方の値を返します。そのため、これらの演算子で論理値以外が使用された場合、論理値以外を返すことがあります。論理演算子は次の表で説明します。

- - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +
論理演算子
演算子使用法説明
論理積 (AND) (&&)expr1 && expr2expr1 を false と見ることができる場合は、expr1 を返します。そうでない場合は expr2 を返します。したがってブール値を用いた場合、両被演算子が true であれば && は true を返し、そうでなければ false を返します。
論理和 (OR) (||)expr1 || expr2expr1 を true と見ることができる場合は、expr1 を返します。そうでない場合は expr2 を返します。したがってブール値を用いた場合、どちらかの被演算子が true であれば || は true を返し、両方とも false であれば false を返します。
論理否定 (NOT) (!)!expr単一の被演算子を true と見ることができる場合は、false を返します。そうでない場合は true を返します。
論理演算子
演算子使用法説明
論理積 (AND) (&&)expr1 && expr2expr1 を false と見ることができる場合は、expr1 を返します。そうでない場合は expr2 を返します。したがって論理値を用いた場合、両オペランドが true であれば && は true を返し、そうでなければ false を返します。
論理和 (OR) (||)expr1 || expr2expr1 を true と見ることができる場合は、expr1 を返します。そうでない場合は expr2 を返します。したがって論理値を用いた場合、どちらかのオペランドが true であれば || は true を返し、両方とも false であれば false を返します。
論理否定 (NOT) (!)!expr単一のオペランドを true と見ることができる場合は、false を返します。そうでない場合は true を返します。
-

false に変換される式としては、null、0、NaN、空文字列 ("")、undefined に評価される式が挙げられます。

+

false に変換される式としては、null、0、NaN、空文字列 ("")、undefined に評価される式が挙げられます。

以下のコードで && (論理 AND) 演算子の例を示します。

-
var a1 =  true && true;     // t && t は true を返す
+
var a1 =  true && true;     // t && t は true を返す
 var a2 =  true && false;    // t && f は false を返す
 var a3 = false && true;     // f && t は false を返す
 var a4 = false && (3 == 4); // f && f は false を返す
@@ -516,7 +513,7 @@ var a7 = 'Cat' && false;    // t && f は false を返す
 
 

以下のコードで || (論理 OR) 演算子の例を示します。

-
var o1 =  true || true;     // t || t は true を返す
+
var o1 =  true || true;     // t || t は true を返す
 var o2 = false || true;     // f || t は true を返す
 var o3 =  true || false;    // t || f は true を返す
 var o4 = false || (3 == 4); // f || f は false を返す
@@ -527,62 +524,63 @@ var o7 = 'Cat' || false;    // t || f は Cat を返す
 
 

以下のコードで !(論理 NOT) 演算子の例を示します。

-
var n1 = !true;  // !t は false を返す
+
var n1 = !true;  // !t は false を返す
 var n2 = !false; // !f は true を返す
 var n3 = !'Cat'; // !t は false を返す
 
-

短絡評価

+

短絡評価

-

論理式は左から右に評価されるため、以下のルールを用いた「{{原語併記("短絡","short-circuit")}}」評価によるテストが実行できます。

+

複数の論理式が左から右へ評価される際に、以下の規則で「短絡」 (short-sircuit) 評価ができるかどうかが確認されます。

    -
  • false && anything は false へと短絡評価されます。
  • -
  • true || anything は true へと短絡評価されます。
  • +
  • false && 何か は false へと短絡評価されます。
  • +
  • true || 何か は true へと短絡評価されます。

論理的なルールにより、これらの評価が常に正確であることが保証されます。上記の式で anything の部分は評価されないため、どのようにしても副作用が生じないことに注意してください。

-

2 番目のケースでは、最新のコードで || のように機能する新しい Null 合体演算子 (??) を使用できますが、最初の式が "nullish"、つまり null または undefined の場合にのみ 2 番目の式を返すことに注意してください。したがって、''0 などの値が最初の式の有効な値である場合は、デフォルトを提供することをお勧めします。

+

なお、 2 番目のケースについては、新しいコードでにおいて新しい Null 合体演算子 (??) が使用できますが、これは最初の式が "nullish"、つまり null または undefined である場合のみ 2 番目の式を返します。したがって、 1 番目の式で ''0 などを有効な値として扱う場合に、既定値を提供する代替策とすることをお勧めします。

-

文字列演算子

+

文字列演算子

-

文字列に対して使用することができる演算子には、比較演算子に加えて、2 つの文字列を結合する結合演算子 (+) があり、2 つの被演算子の文字列を結合した文字列を返します。

+

文字列に対して使用することができる演算子には、比較演算子に加えて、2 つの文字列を結合する結合演算子 (+) があり、2 つのオペランドの文字列を結合した文字列を返します。

例えば、

-
console.log('my ' + 'string'); // 文字列 "my string" がログに表示される。
+
console.log('my ' + 'string'); // 文字列 "my string" がログに表示される。

短縮表記した代入演算子 += も文字列の結合に使用できます。

例えば、

-
var mystring = 'alpha';
+
var mystring = 'alpha';
 mystring += 'bet'; // "alphabet" と評価されて、mystring にその値を代入します。
-

条件(三項)演算子

+

条件(三項)演算子

-

条件演算子は JavaScript で唯一 3 つの被演算子を取る演算子です。条件に基づいて 2 つの値のうち 1 つを選択します。構文は以下の通りです。

+

条件演算子は JavaScript で唯一 3 つのオペランドを取る演算子です。条件に基づいて 2 つの値のうちの 1 つを選択します。構文は以下の通りです。

-
条件 ? 値1 : 値2
+
条件 ? 値 1 : 値 2
 
-

条件が真の場合、演算子は値1 の値を選択します。そうでない場合、値2 の値を選択します。標準的な演算子を使用できる場所ならどこでも条件演算子を使用できます。

+

条件が真の場合、演算子は値 1 の値を選択します。そうでない場合、値 2 の値を選択します。標準的な演算子を使用できる場所ならどこでも条件演算子を使用できます。

例えば、

-
var status = (age >= 18) ? 'adult' : 'minor';
+
var status = (age >= 18) ? 'adult' : 'minor';
 

この文では、age が 18 以上の場合、変数 status に "adult" の値が代入されます。そうでない場合 status には "minor" が代入されます。

-

カンマ演算子

+

カンマ演算子

-

カンマ演算子 (,) は両側の被演算子を単純に評価し、最後の被演算子の値を返します。この演算子は主に for ループ内で使用され、これによりループのたびに複数の変数を更新できます。

+

カンマ演算子(,)は、オペランドの両方を評価し、最後のオペランドの値を返します。この演算子は、主にfor ループの中で、繰り返しのたびに複数の変数を更新するために使用されます。多くの場合、2つの独立したステートメントを代わりに使用することができ、また使用すべきです。 + (,) は両側のオペランドを単純に評価し、最後のオペランドの値を返します。この演算子は主に for ループ内で使用され、これによりループのたびに複数の変数を更新できます。

-

例えば、一辺が 10 要素の 2 次元配列 a があったとして、以下のコードでカンマ演算子を用いて 2 つの変数を同時にインクリメントしています。このコードでは配列の対角成分の値を出力します。

+

例えば、一辺が 10 要素の 2 次元配列 a があったとして、以下のコードでカンマ演算子を用いて 2 つの変数を同時に更新しています。このコードでは配列の対角成分の値を出力します。

-
var x = [0,1,2,3,4,5,6,7,8,9]
+
var x = [0,1,2,3,4,5,6,7,8,9]
 var a = [x, x, x, x, x];
 
 for (var i = 0, j = 9; i <= j; i++, j--)
@@ -590,15 +588,15 @@ for (var i = 0, j = 9; i <= j; i++, j--)
   console.log('a[' + i + '][' + j + ']= ' + a[i][j]);
 
-

単項演算子

+

単項演算子

-

単項演算は被演算子を 1 つだけ取る演算です。

+

単項演算はオペランドを 1 つだけ取る演算です。

-

delete

+

delete

delete 演算子はオブジェクトやオブジェクトのプロパティ、配列の指定されたインデックスの要素を削除します。構文は以下のとおりです。

-
delete object.property;
+
delete object.property;
 delete object[propertyKey];
 delete objectName[index];
 delete property; // legal only within a with statement
@@ -606,13 +604,11 @@ delete property; // legal only within a with statement
 
 

ここで object はオブジェクトの名前を、property は既存のプロパティを、propertyKey は配列の要素の位置を示す整数をそれぞれ表しています。

-

4番目の形式は with 文内でのみ有効で、これはあるオブジェクトからプロパティを削除します。

- -

delete を用いて暗黙的に宣言された変数を削除できますが、var 文で宣言された変数は削除できません。

+

4番目の形式は with 文の中でのみ有効で、オブジェクトからプロパティを削除し、グローバルオブジェクトのプロパティに対しても削除します。

-

delete 演算が成功すると、そのプロパティや要素には undefined がセットされます。また、演算が可能だった場合に delete 演算子は true を返します。演算が不可能である場合は false を返します。

+

delete 演算子が成功すると、オブジェクトからそのプロパティが削除されます。その後、このプロパティにアクセスしようとしても、結果は undefined になります。 delete 演算子は、操作が可能な場合は true を返し、操作が不可能な場合は false を返します。

-
x = 42; // 暗黙のうちに window.x を作成
+
x = 42; // 暗黙のうちに window.x を作成
 var y = 43;
 var myobj = {h: 4}; // プロパティ h を持つオブジェクトを作成
 
@@ -622,23 +618,24 @@ delete Math.PI; // false を返す (定義済みプロパティは削除不可
 delete myobj.h; // true を返す (ユーザー定義プロパティは削除可能)
 
-
配列要素の削除
+
配列要素の削除
-

配列は単なるオブジェクトの集まりであるため、技術的には各要素を削除することが可能です。しかしそれは悪しき慣例とみなされており、使用しないでください。配列の要素を削除したとき、配列の長さは影響を受けず、他の要素は再インデックスされません。この振る舞いを達成するのであれば、単に要素を undefined で上書きするほうがはるかに良い方法です。実際に配列を操作するためには、splice のようなさまざまな配列のメソッドを使用してください。

+

配列は単なるオブジェクトの集まりであるため、技術的には各要素を delete することが可能です。しかしそれは悪しき慣例とみなされており、使用しないでください。配列の要素を削除しても、配列の length は影響を受けず、他の要素の添字も付けなおされません。このようなことをするのであれば、単に要素を undefined で上書きするほうがはるかに良い方法です。実際に配列を操作するためには、 splice のようなさまざまな配列のメソッドを使用してください。 +

-

typeof

+

typeof

-

typeof 演算子は次の方法のうち、どちらかの方法で使用します。

+

typeof 演算子は次の方法のうち、どちらかの方法で使用します。

-
typeof 被演算子
-typeof (被演算子)
+
typeof オペランド
+typeof (オペランド)
 
-

typeof 演算子は、未評価の被演算子の型を指す文字列を返します。被演算子には返される型を調べる対象となる文字列、キーワード、オブジェクトを指定します。括弧はあってもなくてもかまいません。

+

typeof 演算子は、未評価のオペランドの型を指す文字列を返します。オペランドには返される型を調べる対象となる文字列、キーワード、オブジェクトを指定します。括弧はあってもなくてもかまいません。

以下の変数を定義することにしましょう。

-
var myFun = new Function('5 + 2');
+
var myFun = new Function('5 + 2');
 var shape = 'round';
 var size = 1;
 var foo = ['Apple', 'Mango', 'Orange'];
@@ -647,7 +644,7 @@ var today = new Date();
 
 

typeof 演算子は、変数の型に応じて以下の値を返します。

-
typeof myFun;       // "function" を返す
+
typeof myFun;       // "function" を返す
 typeof shape;       // "string" を返す
 typeof size;        // "number" を返す
 typeof foo;         // "object" を返す
@@ -657,66 +654,66 @@ typeof doesntExist; // "undefined" を返す
 
 

truenull というキーワードに対して、typeof 演算子は以下の結果を返します。

-
typeof true; // "boolean" を返す
+
typeof true; // "boolean" を返す
 typeof null; // "object" を返す
 
-

数値や文字列に対して、typeof 演算子は以下の結果を返します。

+

数値や文字列に対して、 typeof 演算子は以下の結果を返します。

-
typeof 62;            // "number" を返す
+
typeof 62;            // "number" を返す
 typeof 'Hello world'; // "string" を返す
 
-

プロパティ値に対して、typeof 演算子はプロパティが持つ値の型を返します。

+

プロパティ値に対して、 typeof 演算子はプロパティが持つ値の型を返します。

-
typeof document.lastModified; // "string" を返す
+
typeof document.lastModified; // "string" を返す
 typeof window.length;         // "number" を返す
 typeof Math.LN2;              // "number" を返す
 
-

メソッドや関数に対して、typeof 演算子は以下の結果を返します。

+

メソッドや関数に対して、 typeof 演算子は以下の結果を返します。

-
typeof blur;        // "function" を返す
+
typeof blur;        // "function" を返す
 typeof eval;        // "function" を返す
 typeof parseInt;    // "function" を返す
 typeof shape.split; // "function" を返す
 
-

定義済みオブジェクトに対して、typeof 演算子は以下の結果を返します。

+

定義済みオブジェクトに対して、 typeof 演算子は以下の結果を返します。

-
typeof Date;     // "function" を返す
+
typeof Date;     // "function" を返す
 typeof Function; // "function" を返す
 typeof Math;     // "object" を返す
 typeof Option;   // "function" を返す
 typeof String;   // "function" を返す
 
-

void

+

void

void 演算子は以下のどちらかの方法で使用します。

-
void (式)
+
void (式)
 void 式
 

void 演算子は、値を返さずに評価する式を指定します。は評価する JavaScript の式となります。式の周りの括弧はあってもなくてもかまいませんが、使用する方が見た目がよいです。

-

関係演算子

+

関係演算子

-

関係演算子は被演算子を比較し、比較結果が真かどうかに基づいて Boolean の値を返します。

+

関係演算子はオペランドを比較し、比較結果が真かどうかに基づいて論理値を返します。

-

in

+

in

in 演算子は、指定したプロパティが指定のオブジェクトにある場合に true を返します。構文は以下のとおりです。

-
プロパティ名または数値 in オブジェクト名
+
プロパティ名または数値 in オブジェクト名
 

ここで プロパティ名または数値はプロパティ名または配列のインデックスを表す文字列、数値または記号式を、オブジェクト名はオブジェクトの名前をそれぞれ表します。

次の例で in 演算子の使用法を示します。

-
// 配列
+
// 配列
 var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
 0 in trees;        // true を返す
 3 in trees;        // true を返す
@@ -736,166 +733,168 @@ var mycar = { make: 'Honda', model: 'Accord', year: 1998 };
 'model' in mycar; // returns true
 
-

instanceof

+

instanceof

instanceof 演算子は、指定されたオブジェクトが指定されたオブジェクトの種類である場合に true を返します。構文は以下のとおりです。

-
オブジェクト名 instanceof オブジェクト型
+
オブジェクト名 instanceof オブジェクト型
 
-

ここでオブジェクト名オブジェクト型と比較するオブジェクトの名前を、オブジェクト型は {{jsxref("Date")}} や {{jsxref("Array")}} のようなオブジェクトの種類をそれぞれ表します。

+

ここでオブジェクト名オブジェクト型と比較するオブジェクトの名前を、オブジェクト型は {{jsxref("Date")}} や {{jsxref("Array")}} のようなオブジェクトの型をそれぞれ表します。

-

実行時にオブジェクトの種類を確認する必要があるときは instanceof を使用してください。例えば例外を受け取るとき、発生した例外の種類に応じて、別々の例外を扱うコードに分岐することができます。

+

実行時にオブジェクトの型を確認する必要があるときは instanceof を使用してください。例えば例外を受け取るとき、発生した例外の型に応じて、別々の例外を扱うコードに分岐することができます。

例えば次のコードでは、instanceof を使用して theDayDate オブジェクトであるかを判断しています。theDayDate オブジェクトであるため、if 文中の文が実行されます。

-
var theDay = new Date(1995, 12, 17);
+
var theDay = new Date(1995, 12, 17);
 if (theDay instanceof Date) {
   // 実行する文
 }
 
-

演算子の優先順位

+

演算子の優先順位

演算子の優先順位によって、式評価の際に演算子が適用される順番が定義されています。括弧を用いることで演算子の優先順位を上書きすることができます。

次の表では演算子の優先順位を、高いものから低い順に並べています。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
演算子の優先順位
演算子の種類対応する演算子
メンバー. []
インスタンスの呼び出し/作成() new
否定/インクリメント! ~ - + ++ -- typeof void delete
乗算/除算* / %
加算/減算+ -
ビットシフト<< >> >>>
関係< <= > >= in instanceof
等値== != === !==
ビット論理積&
ビット排他的論理和^
ビット論理和|
論理積&&
論理和||
条件?:
代入= += -= *= /= %= <<= >>= >>>= &= ^= |= &&= ||= ??=
カンマ,
演算子の優先順位
演算子の種類対応する演算子
メンバー. []
呼び出し/インスタンスの作成() new
否定/インクリメント! ~ - + ++ -- typeof void delete
乗算/除算* / %
加算/減算+ -
ビットシフト<< >> >>>
関係< <= > >= in instanceof
等値== != === !==
ビット論理積&
ビット排他的論理和^
ビット論理和|
論理積&&
論理和||
条件?:
代入 + = += -= *= /= %= <<= >>= >>>= &= ^= |= &&= ||= ??= +
カンマ,
-

それぞれの演算子についてのリンクを含むこの表の詳細版に関しては JavaScript リファレンスを参照してください。

+

それぞれの演算子についてのリンクを含むこの表の詳細版に関しては JavaScript リファレンスを参照してください。

-

+

-

とは、ある値へと決定される有効なコードの単位のことです。

+

とは、ある値へと決定されるあらゆる有効なコードの単位のことです。

-

文法的に正しい式は必ず何らかの値に決定されますが、概念的に、副作用の有無によって 2種類にわけられます。代入演算は副作用のあるものの代表です。副作用の無いものは、式そのものが評価されその値が決定されます。

+

構文的に有効な式は、すべて何らかの値に解決しますが、概念的には、副作用のある式 (例えば、変数に値を代入する式) と、ある意味で評価して値に解決する式の 2 種類があります。

x = 7 という式が前者の例です。この式では x に 7 という値を代入するのに = 演算子を使っています。この式自体は 7 と評価されます。

-

3 + 4 という式は後者の例です。この式では 3 と 4 を加算するのに + 演算子を使っており、計算結果の 7 を変数に代入していません。
-
- JavaScript には、以下の種類の式があります。

+

3 + 4 という式は後者の例です。この式では 3 と 4 を加算するのに + 演算子を使っており、計算結果の 7 を変数に代入していません。

+ +

JavaScript には、以下の種類の式があります。

    -
  • 算術式 : 評価結果は数値になります。例えば 3.14159 など。(一般に算術演算子を使用します)
  • -
  • 文字列式 : 評価結果は文字列になります。例えば "Fred" や "234" など。(一般に文字列演算子を使用します)
  • -
  • 論理式 : 評価結果は true または false になります。(よく論理演算子を用います)
  • +
  • 算術式 : 評価結果は数値になります。例えば 3.14159 など。 (一般に算術演算子を使用します。)
  • +
  • 文字列式 : 評価結果は文字列になります。例えば "Fred" や "234" など。 (一般に文字列演算子を使用します。)
  • +
  • 論理式 : 評価結果は true または false になります。 (よく論理演算子を用います)
  • 基本式 : JavaScript にある基本のキーワードと一般的な式です。
  • 左辺式 : 代入先になるような式です。
-

基本式

+

基本式

JavaScript における基本のキーワードと一般的な式です。

-

this

+

this

-

this キーワードを使用することで現在のオブジェクトを参照できます。一般的に this は、あるメソッド内で呼び出されるオブジェクトを参照します。this の使用法は以下のとおりです。

+

this キーワードを使用することで、現在のオブジェクトを参照できます。一般的に this は、メソッド内の呼び出しオブジェクトを指します。 this は、ドット表記またはブラケット表記で使用します。

-
this['propertyName']
+
this['propertyName']
 this.propertyName
 
-

オブジェクトと上限および下限の値を渡し、そのオブジェクトの value プロパティを検証する validate という関数があるとしましょう。

+

validate という関数があり、オブジェクトと上限と下限の値を渡すことでオブジェクトの value プロパティを検証するものであるとしましょう。

-
function validate(obj, lowval, hival) {
+
function validate(obj, lowval, hival) {
   if ((obj.value < lowval) || (obj.value > hival))
     console.log('Invalid Value!');
 }
 
-

次の例のように、各フォーム要素の onChange イベントハンドラにおいて validate を呼び出し、その関数にフォーム要素を渡すのに this を使うことができます。

+

次の例のように、各フォーム要素の onChange イベントハンドラーにおいて validate を呼び出し、その関数にフォーム要素を渡すのに this を使うことができます。

-
<p>Enter a number between 18 and 99:</p>
+
<p>Enter a number between 18 and 99:</p>
 <input type="text" name="age" size=3 onChange="validate(this, 18, 99);">
 
-

グループ化演算子

+

グループ化演算子

グループ化演算子 ( ) は式内での評価の優先順位を制御します。例えば、加算が最初に評価されるよう、最初に行われる演算を乗算と除算から加算と減算へと上書きすることができます。

-
var a = 1;
+
var a = 1;
 var b = 2;
 var c = 3;
 
-// デフォルトの優先順位
+// 既定の優先順位
 a + b * c     // 7
-// デフォルトではこのように評価される
+// 既定ではこのように評価される
 a + (b * c)   // 7
 
 // 優先順位を上書きし、
@@ -906,23 +905,24 @@ a + (b * c)   // 7
 a * c + b * c // 9
 
-

左辺式

+

左辺式

左辺値は、代入する宛先です。

-

new

+

new

-

new 演算子は、ユーザー定義オブジェクトやビルトインオブジェクトのインスタンス作成に使用します。new の使用法は以下のとおりです。

+

new 演算子を使用すると、いずれかのユーザー定義オブジェクト型や組み込みオブジェクト型のインスタンスを生成することができます。 new の使用法は以下のとおりです。

-
var オブジェクト名 = new objectType([引数1, 引数2, ..., 引数N]);
+
var オブジェクト名 = new objectType([引数1, 引数2, ..., 引数N]);
 
-

super

+

super

super キーワードは自分の親のオブジェクトに関数を呼び出すのに使います。これは下の例のように、クラスと共に使って親のコンストラクタを呼び出すのに便利です。

-
super([引数]); // 親のコンストラクタを呼び出す。
+
super([引数]); // 親のコンストラクターを呼び出す。
 super.親の関数([引数]);
 
-
{{PreviousNext("Web/JavaScript/Guide/Functions", "Web/JavaScript/Guide/Numbers_and_dates")}}
+
{{PreviousNext("Web/JavaScript/Guide/Functions", + "Web/JavaScript/Guide/Numbers_and_dates")}}
-- cgit v1.2.3-54-g00ecf