From b492e1f57a059209ba801270375697e917f365f8 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Mon, 27 Sep 2021 23:03:04 +0900 Subject: JavaScript の等価演算子関係の文書を更新 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 2021/07/21 時点の英語版に同期 --- .../reference/operators/equality/index.md | 144 ++++++++++----------- .../reference/operators/inequality/index.md | 100 +++++++------- .../reference/operators/strict_equality/index.md | 116 ++++++++--------- .../reference/operators/strict_inequality/index.md | 106 ++++++++------- 4 files changed, 222 insertions(+), 244 deletions(-) (limited to 'files/ja/web') diff --git a/files/ja/web/javascript/reference/operators/equality/index.md b/files/ja/web/javascript/reference/operators/equality/index.md index 25a1e23347..e68bb25863 100644 --- a/files/ja/web/javascript/reference/operators/equality/index.md +++ b/files/ja/web/javascript/reference/operators/equality/index.md @@ -3,85 +3,87 @@ title: 等価 (==) slug: Web/JavaScript/Reference/Operators/Equality tags: - JavaScript - - Language feature - - Operator - - Reference - - 演算子 - 言語機能 + - 演算子 + - Reference +browser-compat: javascript.operators.equality translation_of: Web/JavaScript/Reference/Operators/Equality --- -
{{jsSidebar("Operators")}}
+{{jsSidebar("Operators")}} + +等価演算子 (`==`) は、二つのオペランドが等しいことを検査し、論理値で結果を返します。[厳密等価](/ja/docs/Web/JavaScript/Reference/Operators/Strict_equality)演算子とは異なり、オペランドの型が異なる場合には型の変換を試みてから比較を行います。 + +{{EmbedInteractiveExample("pages/js/expressions-equality.html")}} -

等価演算子 (==) は、二つのオペランドが等しいことを検査し、論理値で結果を返します 厳密等価演算子とは異なり、オペランドの型が異なる場合には型の変換を試みてから比較を行います。

+## 構文 -
{{EmbedInteractiveExample("pages/js/expressions-equality.html")}}
+```js +x == y +``` - +## 解説 -

構文

+等価演算子 (`==` および `!=`) は、[抽象等価比較アルゴリズム](https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3)を使用して 2 つのオペランドを比較します。これは、およそ次のようにまとめることができます。 -
x == y
-
+- 両方のオペランドがオブジェクトである場合、同じオブジェクトを指している場合に限り `true` を返します。 +- 一方のオペランドが `null` で、もう一方が `undefined` であった場合は `true` を返します。 +- オペランドの型が異なる場合は、比較前に同じ型に変換を試みます。 -

解説

+ - 数値と文字列を比較する場合、文字列を数値に変換しようとします。 + - 一方のオペランドが論理値である場合、その論理値のオペランドが `true` である場合は 1 に、 `false` である場合は +0 に変換します。 + - オペランドのうちの一方がオブジェクトで、もう一方が数値または文字列である場合は、そのオブジェクトの `valueOf()` および `toString()` メソッドを使用してプリミティブに変換を試みます。 -

等価演算子 (== および !=) は、抽象等価比較アルゴリズムを使用して二つのオペランドを比較します。これは、およそ次のようにまとめることができます。

+- オペランドが同じ型である場合は、次のよう比較します。 - + - 文字列型: 両方のオペランドが同じ文字を同じ順序で持っている場合のみ、 `true` を返します。 + - 数値型: 両方のオペランドが同じ値を持っている場合のみ、 `true` を返します。 `+0` と `-0` は同じ値と見なされます。一方のオペランドが `NaN` である場合は `false` を返します。 + - 論理型: 両方のオペランドが共に `true` であるか、共に `false` である場合のみ `true` になります。 -

この演算子と厳密等価 (===) 演算子の最も顕著な違いは、厳密等価演算子が型変換を試みない点です。厳密等価演算は、オペランドの型が異なる場合は常に異なるものと見なします。

+この演算子と[厳密等価](/ja/docs/Web/JavaScript/Reference/Operators/Strict_equality) (`===`) 演算子の最も顕著な違いは、厳密等価演算子が型変換を試みない点です。厳密等価演算は、オペランドの型が異なる場合は常に異なるものと見なします。 -

+## 例 -

型変換がない場合の比較

+### 型変換がない場合の比較 -
1 == 1;              // true
-"hello" == "hello";  // true
+```js +1 == 1; // true +"hello" == "hello"; // true +``` -

型変換がある場合の比較

+### 型変換がある場合の比較 -
"1" ==  1;            // true
+```js
+"1" ==  1;            // true
 1 == "1";             // true
 0 == false;           // true
 0 == null;            // false
 0 == undefined;       // false
+0 == !!null;          // true (論理 NOT 演算子を参照)
+0 == !!undefined;     // true (論理 NOT 演算子を参照)
 null == undefined;    // true
 
 const number1 = new Number(3);
 const number2 = new Number(3);
 number1 == 3;         // true
-number1 == number2;   // false
+number1 == number2; // false +``` -

オブジェクトの比較

+### オブジェクトの比較 -
const object1 = {"key": "value"}
+```js
+const object1 = {"key": "value"}
 const object2 = {"key": "value"};
 
 object1 == object2 // false
-object2 == object2 // true
+object2 == object2 // true +``` -

文字列と String オブジェクトの比較

+### 文字列と String オブジェクトの比較 -

new String() を使用して構築された文字列はオブジェクトであることに注意してください。文字列リテラルとの比較を行うと、 String オブジェクトは文字列リテラルに変換され、その中身が比較されます。ただし、両方のオペランドが String オブジェクトであった場合は、オブジェクトとして比較され、同じオブジェクトを参照している場合だけ比較に成功します。

+`new String()` を使用して構築された文字列はオブジェクトであることに注意してください。文字列リテラルとの比較を行うと、 `String` オブジェクトは文字列リテラルに変換され、その中身が比較されます。ただし、両方のオペランドが `String` オブジェクトであった場合は、オブジェクトとして比較され、同じオブジェクトを参照している場合だけ比較に成功します。 -
const string1 = "hello";
+```js
+const string1 = "hello";
 const string2 = String("hello");
 const string3 = new String("hello");
 const string4 = new String("hello");
@@ -90,37 +92,27 @@ console.log(string1 == string2); // true
 console.log(string1 == string3); // true
 console.log(string2 == string3); // true
 console.log(string3 == string4); // false
-console.log(string4 == string4); // true
+console.log(string4 == string4); // true +``` -

Date と文字列の比較

+### Date と文字列の比較 -
const d = new Date('December 17, 1995 03:24:00');
+```js
+const d = new Date('December 17, 1995 03:24:00');
 const s = d.toString(); // for example: "Sun Dec 17 1995 03:24:00 GMT-0800 (Pacific Standard Time)"
-console.log(d == s);    //true
- -

仕様書

- - - - - - - - - - - - -
仕様書
{{SpecName('ESDraft', '#sec-equality-operators', 'Equality operators')}}
- -

ブラウザーの互換性

- -

{{Compat("javascript.operators.strict_inequality")}}

- -

関連情報

- - +console.log(d == s); //true +``` + +## 仕様書 + +{{Specifications}} + +## ブラウザーの互換性 + +{{Compat}} + +## 関連情報 + +- [不等価演算子](/ja/docs/Web/JavaScript/Reference/Operators/Inequality) +- [厳密等価演算子](/ja/docs/Web/JavaScript/Reference/Operators/Strict_equality) +- [厳密不等価演算子](/ja/docs/Web/JavaScript/Reference/Operators/Strict_inequality) diff --git a/files/ja/web/javascript/reference/operators/inequality/index.md b/files/ja/web/javascript/reference/operators/inequality/index.md index aab622a884..29e40f7b29 100644 --- a/files/ja/web/javascript/reference/operators/inequality/index.md +++ b/files/ja/web/javascript/reference/operators/inequality/index.md @@ -3,96 +3,98 @@ title: 不等価 (!=) slug: Web/JavaScript/Reference/Operators/Inequality tags: - JavaScript - - Language feature - - Operator + - 言語機能 + - 演算子 - Reference +browser-compat: javascript.operators.inequality translation_of: Web/JavaScript/Reference/Operators/Inequality --- -
{{jsSidebar("Operators")}}
+{{jsSidebar("Operators")}} -

不等価演算子 (!=) は、2つのオペランドが等しくないかをチェックし、ブール値の結果を返します。厳密不等価演算子とは異なり、異なる型のオペランドを変換して比較を行おうとします。

+不等価演算子 (`!=`) は、2 つのオペランドが等しくないことを検査し、論理値で結果を返します。[厳密不等価](/ja/docs/Web/JavaScript/Reference/Operators/Strict_inequality)演算子とは異なり、異なる型のオペランドを変換して比較を行おうとします。 -
{{EmbedInteractiveExample("pages/js/expressions-inequality.html")}}
+{{EmbedInteractiveExample("pages/js/expressions-inequality.html")}} +## 構文 +```js +x != y +``` -

構文

+## 解説 -
x != y
+不等価演算子は、そのオペランドが等しくないことを検査します。これは[等価](/ja/docs/Web/JavaScript/Reference/Operators/Equality)演算子の逆に当たるので、以下の 2 行は常に同じ結果になります。 -

説明

+```js +x != y -

不等価演算子は、そのオペランドが等しくないかどうかをチェックします。これは等価演算子の否定なので、次の2行は常に同じ結果になります。

+!(x == y) +``` -
x != y
+比較アルゴリズムの詳細については、[等価](/ja/docs/Web/JavaScript/Reference/Operators/Equality)演算子のページを参照して下さい。
 
-!(x == y)
+等価演算子と同様に、不等価演算子は異なる型のオペランドを変換して比較しようとします。 -

比較アルゴリズムの詳細については、等価演算子のページを参照して下さい。

+```js +3 != "3"; // false +``` -

等価演算子と同様に、不等価演算子は異なる型のオペランドを変換して比較しようとします。

+これを防止し、異なる型が異なる結果を返すようにするには、代わりに[厳密不等価](/ja/docs/Web/JavaScript/Reference/Operators/Strict_inequality)演算子を使用してください。 -
3 != "3"; // false
+```js +3 !== "3"; // true +``` -

これを防止し、異なる型が異なる結果を返すようにするには、代わりに厳密不等価演算子を使用します:

+## 例 -
3 !== "3"; // true
+### 型変換がない場合の比較 -

- -

型変換なしの比較

- -
1 != 2;              // true
+```js
+1 != 2;              // true
 "hello" != "hola";   // true
 
 1 != 1;              // false
-"hello" != "hello";  // false
+"hello" != "hello"; // false +``` -

型変換ありの比較

+### 型変換がある場合の比較 -
"1" !=  1;            // false
+```js
+"1" !=  1;            // false
 1 != "1";             // false
 0 != false;           // false
 0 != null;            // true
 0 != undefined;       // true
+0 != !!null;          // false (論理 NOT 演算子を参照)
+0 != !!undefined;     // false (論理 NOT 演算子を参照)
 null != undefined;    // false
 
 const number1 = new Number(3);
 const number2 = new Number(3);
 number1 != 3;         // false
-number1 != number2;   // true
+number1 != number2; // true +``` -

オブジェクトの比較

+### オブジェクトの比較 -
const object1 = {"key": "value"}
+```js
+const object1 = {"key": "value"}
 const object2 = {"key": "value"};
 
 object1 != object2 // true
-object2 != object2 // false
- -

仕様

- - - - - - - - - - -
仕様
{{SpecName('ESDraft', '#sec-equality-operators', 'Equality operators')}}
+object2 != object2 // false +``` -

ブラウザー実装状況

+## 仕様書 +{{Specifications}} +## ブラウザーの互換性 -

{{Compat("javascript.operators.inequality")}}

+{{Compat}} -

関連項目

+## 関連情報 - +- [等価演算子](/ja/docs/Web/JavaScript/Reference/Operators/Equality) +- [厳密等価演算子](/ja/docs/Web/JavaScript/Reference/Operators/Strict_equality) +- [厳密不等価演算子](/ja/docs/Web/JavaScript/Reference/Operators/Strict_inequality) diff --git a/files/ja/web/javascript/reference/operators/strict_equality/index.md b/files/ja/web/javascript/reference/operators/strict_equality/index.md index 436a6d0899..81ed20e794 100644 --- a/files/ja/web/javascript/reference/operators/strict_equality/index.md +++ b/files/ja/web/javascript/reference/operators/strict_equality/index.md @@ -3,50 +3,46 @@ title: 厳密等価 (===) slug: Web/JavaScript/Reference/Operators/Strict_equality tags: - JavaScript - - Language feature - - Operator - - Reference - - 演算子 - 言語機能 + - 演算子 + - Reference +browser-compat: javascript.operators.strict_equality translation_of: Web/JavaScript/Reference/Operators/Strict_equality --- -
{{jsSidebar("Operators")}}
- -

厳密等価演算子 (===) は、二つのオペランドが等しいことを検査し、論理値で結果を返します 等価演算子とは異なり、厳密等価演算子はオペランドの型が異なる場合、常に異なるものと判断します。

+{{jsSidebar("Operators")}} -
{{EmbedInteractiveExample("pages/js/expressions-strict-equality.html")}}
+厳密等価演算子 (`===`) は、二つのオペランドが等しいことを検査し、論理値で結果を返します。[等価](/ja/docs/Web/JavaScript/Reference/Operators/Equality)演算子とは異なり、厳密等価演算子はオペランドの型が異なる場合、常に異なるものと判断します。 - +{{EmbedInteractiveExample("pages/js/expressions-strict-equality.html")}} -

構文

+## 構文 -
x === y
+```js +x === y +``` -

解説

+## 解説 -

厳密等価演算子 (=== および !==) は、厳密等価比較アルゴリズムを使用して二つのオペランドを比較します。

+厳密等価演算子 (`===` および `!==`) は、[厳密等価比較アルゴリズム](https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6)を使用して 2 つのオペランドを比較します。 - +- オペランドの型が異なる場合は、 `false` を返します。 +- 両方のオペランドがオブジェクトである場合、同じオブジェクトを指している場合に限り `true` を返します。 +- 両方のオペランドが `null` または両方のオペランドが `undefined` であった場合は `true` を返します。 +- どちらかのオペランドが `NaN` であった場合は `false` を返します。 +- それ以外の場合は、2 つのオペランドの値を比較します。 -

この演算子と等価 (==) 演算子の最も顕著な違いは、オペランドの型が異なる場合、 == 演算子は比較前に同じ型に変換しようとすることです。

+ - 数値型は同じ値の数値である必要があります。 `+0` と `-0` は同じ値と見なされます。 + - 文字列型は同じ文字が同じ順序で並んでいる必要があります。 + - 論理型は両方が `true` であるか両方が `false` である必要があります。 + +この演算子と[等価](/ja/docs/Web/JavaScript/Reference/Operators/Equality) (`==`) 演算子の最も顕著な違いは、オペランドの型が異なる場合、 `==` 演算子は比較前に同じ型に変換しようとすることです。 -

+## 例 -

オペランドが同じ型である場合の比較

+### オペランドが同じ型である場合の比較 -
console.log("hello" === "hello");   // true
+```js
+console.log("hello" === "hello");   // true
 console.log("hello" === "hola");    // false
 
 console.log(3 === 3);               // true
@@ -55,19 +51,23 @@ console.log(3 === 4);               // false
 console.log(true === true);         // true
 console.log(true === false);        // false
 
-console.log(null === null);         // true
+console.log(null === null); // true +``` -

オペランドが異なる方である場合の比較

+### オペランドが異なる型である場合の比較 -
console.log("3" === 3);           // false
+```js
+console.log("3" === 3);           // false
 
 console.log(true === 1);          // false
 
-console.log(null === undefined);  // false
+console.log(null === undefined); // false +``` -

オブジェクトの比較

+### オブジェクトの比較 -
const object1 = {
+```js
+const object1 = {
   name: "hello"
 }
 
@@ -76,31 +76,19 @@ const object2 = {
 }
 
 console.log(object1 === object2);  // false
-console.log(object1 === object1);  // true
- -

仕様書

- - - - - - - - - - - - -
仕様書
{{SpecName('ESDraft', '#sec-equality-operators', 'Equality operators')}}
- -

ブラウザーの互換性

- -

{{Compat("javascript.operators.strict_inequality")}}

- -

関連情報

- - +console.log(object1 === object1); // true +``` + +## 仕様書 + +{{Specifications}} + +## ブラウザーの互換性 + +{{Compat}} + +## 関連情報 + +- [等価演算子](/ja/docs/Web/JavaScript/Reference/Operators/Equality) +- [不等価演算子](/ja/docs/Web/JavaScript/Reference/Operators/Inequality) +- [厳密不等価演算子](/ja/docs/Web/JavaScript/Reference/Operators/Strict_inequality) diff --git a/files/ja/web/javascript/reference/operators/strict_inequality/index.md b/files/ja/web/javascript/reference/operators/strict_inequality/index.md index c74ae24677..0044e1161b 100644 --- a/files/ja/web/javascript/reference/operators/strict_inequality/index.md +++ b/files/ja/web/javascript/reference/operators/strict_inequality/index.md @@ -3,44 +3,48 @@ title: 厳密不等価 (!==) slug: Web/JavaScript/Reference/Operators/Strict_inequality tags: - JavaScript - - Language feature - - Operator - - Reference - - 演算子 - 言語機能 + - 演算子 + - Reference +browser-compat: javascript.operators.strict_inequality translation_of: Web/JavaScript/Reference/Operators/Strict_inequality --- -
{{jsSidebar("Operators")}}
- -

厳密不等価演算子 (!==) は、二つのオペランドが等しくないことを検査し、論理値で結果を返します 不等価演算子とは異なり、厳密不等価演算子はオペランドの型が異なる場合、常に異なると判断します。

+{{jsSidebar("Operators")}} -
{{EmbedInteractiveExample("pages/js/expressions-strict-equality.html")}}
+厳密不等価演算子 (`!==`) は、2 つのオペランドが等しくないことを検査し、論理値で結果を返します。[不等価](/ja/docs/Web/JavaScript/Reference/Operators/Inequality)演算子とは異なり、厳密不等価演算子はオペランドの型が異なる場合、常に異なると判断します。 - +{{EmbedInteractiveExample("pages/js/expressions-strict-inequality.html")}} -

構文

+## 構文 -
x !== y
+```js +x !== y +``` -

解説

+## 解説 -

厳密不等価演算子は、オペランドが等しくないことを検査します。これは厳密等価演算子の逆に当たるので、以下の2行は常に同じ結果を生み出します。

+厳密不等価演算子は、オペランドが等しくないことを検査します。これは[厳密等価](/ja/docs/Web/JavaScript/Reference/Operators/Strict_equality)演算子の逆に当たるので、以下の 2 行は常に同じ結果になります。 -
x !== y
+```js
+x !== y
 
-!(x === y)
+!(x === y) +``` -

比較アルゴリズムの詳細については、厳密等価演算子のページをご覧ください。

+比較アルゴリズムの詳細については、[厳密等価](/ja/docs/Web/JavaScript/Reference/Operators/Strict_equality)演算子のページを参照して下さい。 -

厳密等価演算子とと同様に、厳密不等価演算子はオペランドの型が異なると、常に異なるものと見なします。

+厳密等価演算子と同様に、厳密不等価演算子はオペランドの型が異なると、常に異なるものと見なします。 -
3 !== "3"; // true
+```js +3 !== "3"; // true +``` -

+## 例 -

オペランドが同じ型である場合の比較

+### オペランドが同じ型である場合の比較 -
console.log("hello" !== "hello");   // false
+```js
+console.log("hello" !== "hello");   // false
 console.log("hello" !== "hola");    // true
 
 console.log(3 !== 3);               // false
@@ -49,19 +53,23 @@ console.log(3 !== 4);               // true
 console.log(true !== true);         // false
 console.log(true !== false);        // true
 
-console.log(null !== null);         // false
+console.log(null !== null); // false +``` -

オペランドが異なる方である場合の比較

+### オペランドが異なる型である場合の比較 -
console.log("3" !== 3);           // true
+```js
+console.log("3" !== 3);           // true
 
 console.log(true !== 1);          // true
 
-console.log(null !== undefined);  // true
+console.log(null !== undefined); // true +``` -

オブジェクトの比較

+### オブジェクトの比較 -
const object1 = {
+```js
+const object1 = {
   name: "hello"
 }
 
@@ -70,31 +78,19 @@ const object2 = {
 }
 
 console.log(object1 !== object2);  // true
-console.log(object1 !== object1);  // false
- -

仕様書

- - - - - - - - - - - - -
仕様書
{{SpecName('ESDraft', '#sec-equality-operators', 'Equality operators')}}
- -

ブラウザーの互換性

- -

{{Compat("javascript.operators.strict_inequality")}}

- -

関連情報

- - +console.log(object1 !== object1); // false +``` + +## 仕様書 + +{{Specifications}} + +## ブラウザーの互換性 + +{{Compat}} + +## 関連情報 + +- [等価演算子](/ja/docs/Web/JavaScript/Reference/Operators/Equality) +- [不等価演算子](/ja/docs/Web/JavaScript/Reference/Operators/Inequality) +- [厳密等価演算子](/ja/docs/Web/JavaScript/Reference/Operators/Strict_equality) -- cgit v1.2.3-54-g00ecf