ホームページ  >  記事  >  ウェブフロントエンド  >  暗黙的な型変換とは何ですか? JSの暗黙的な型変換の概要

暗黙的な型変換とは何ですか? JSの暗黙的な型変換の概要

不言
不言オリジナル
2018-08-11 16:32:075102ブラウズ

この記事では、暗黙的な型変換とは何か? js の暗黙的な型変換の概要は、参考になると思います。

JavaScript のデータ型は非常に弱いので、算術演算子を使用する場合、たとえば、数値に文字列を加算することができます。異なるデータ型の間で操作を実行できる理由は、JavaScript エンジンが操作の前に暗黙的な型変換を実行するためです。次は数値型とブール型の追加です:

3 + true; 
// 结果:4

結果は数値型です。 C または Java 環境の場合、演算子の両側のデータ型が一致しないため、上記の操作はエラーになります。ただし、JavaScript では、まれに、間違った型によってエラーが発生します。 null または未定義の属性を受け取る場合は、次のようになります。

"hello"(1); 
//结果: error: not a function
null.x; 
// 结果:error: cannot read property 'x' of null

ほとんどの場合、JavaScript はエラーを起こさず、対応する型変換を自動的に実行します。たとえば、-、*、/、% などの算術演算子はオペランドを数値に変換しますが、「+」記号は場合によっては算術プラス記号である場合もあれば、算術プラス記号である場合もあります。は文字列です。接続シンボルは、次のようにオペランドによって異なります:

2 + 3; 
//结果: 5
"hello" + " world"; 
// 结果:"hello world"

ただし、文字列と数値が追加された場合、JavaScript は、数値が最初に来るか文字列が先に来るかに関係なく、数値を文字に自動的に変換します:

"2" + 3; 
// 结果:"23"
2 + "3";
 //结果: "23"

文字列と数値を足した結果は文字列です!

以下のように、「+」の演算方向は左から右であることに注意してください:

1 + 2 + "3"; 
// "33"

これは次と同等です:

(1 + 2) + "3"; 
// "33"

対照的に、次の結果は異なります:

1 + "2" + 3; 
// "123"

ただし暗黙的な型変換により、一部のエラーが隠れてしまうことがあります。たとえば、null は 0 に変換され、未定義は NaN に変換されます。次のように、NaN と NaN は等しくないことに注意してください (これは浮動小数点数の精度によるものです):

var x = NaN;
x === NaN; // false

JavaScript は値が NaN かどうかを検出する isNaN を提供しますが、これは完全に正確ではありません。 isNaN 関数を呼び出す前に、次のように、元々 NaN ではなかった値を NaN に変換する暗黙的な変換プロセスがあるためです。

isNaN("foo"); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN({ valueOf: "foo" }); // true

上記のコードは、isNaN を使用してテストした後、文字列が未定義の場合、またはオブジェクトが見つかった場合でも、結果はすべて true を返します。 ! !しかし、それらは NaN ではありません。

要するに、isNaN が NaN を検出することは信頼できません。 ! !

NaN を検出する信頼性が高く正確な方法があります。

NaN のみがそれ自体と等しくないことは誰もが知っています。数値がそれ自体と等しいかどうかを判断するには、不等号 (!==) を使用できます。したがって、次のように NaN を検出することもできます。 use このモードは、次のように関数として定義されます:

var a = NaN;
a !== a; // true
var b = "foo";
b !== b; // false
var c = undefined;
c !== c; // false
var d = {};
d !== d; // false
var e = { valueOf: "foo" };
e !== e; // false

オブジェクトの暗黙的な変換

オブジェクトは、次のように文字列に変換することができます:

function isReallyNaN(x) {
    return x !== x;
}

Object。変換 toSting 関数を呼び出すことで文字列に変換されます。手動で呼び出して確認することもできます。

"the Math object: " + Math; // "the Math object: [object Math]"
"the JSON object: " + JSON; // "the JSON object: [object JSON]"

同様に、オブジェクトは Of 関数の値を通じて数値に変換することもできます。これを自分で定義することもできます。 value Of 関数は次のようになります:

Math.toString(); // "[object Math]"
JSON.toString(); // "[object JSON]"

オブジェクトに valueOf メソッドと toString メソッドの両方がある場合、次のように、value Of メソッドが常に最初に呼び出されます:

"J" + { toString: function() { return "S"; } }; // "JS"
2 * { valueOf: function() { return 3; } }; // 6

一般的に、value Of と toString で表される値を作成するようにしてください。は同じです (ただし、タイプは異なる場合があります)。

最後のタイプの強制型変換は、if、||、&& などの「真理演算」と呼ばれますが、それらのオペランドは必ずしもブール値である必要はありません。 JavaScript は、単純な変換ルールを通じて一部の非ブール値をブール値に変換します。ほとんどの値は true に変換されますが、少数の値のみが false です。それらは次のとおりです: false、0、-0、""、NaN、null、未定義

。値が false の数値、文字列、オブジェクトがあるためです。 , したがって、真理値変換を直接使用して、関数のパラメーターが渡されるかどうかを判断することは、あまり安全ではありません。たとえば、次のようなデフォルト値を持つオプションのパラメータを持つことができる関数があります:

var obj = {
    toString: function() {
        return "[object MyObject]";
    },
    valueOf: function() {
        return 17;
    }
};
"object: " + obj; // "object: 17"
この関数は、0、-0 を含む、真の値が false であるパラメータを無視します。
function point(x, y) {
if (!x) {
    x = 320;
}
if (!y) {
    y = 240;
}
    return { x: x, y: y };
}

未定義を検出するより正確な方法is typeof 演算を使用します:

point(0, 0); // { x: 320, y: 240 }

この書き方は 0 と unfineed を区別できます:

function point(x, y) {
if (typeof x === "undefined") {
    x = 320;
}
if (typeof y === "undefined") {
    y = 240;
}
    return { x: x, y: y };
}

もう 1 つの方法は、次のようにパラメータを使用して未定義と比較することです:

point(); // { x: 320, y: 240 }
point(0, 0); // { x: 0, y: 0 }

概要:

型エラーは 1 つあります。型変換により非表示になります。

2. 「+」は、オペランドに応じて、文字列の連結と算術加算の両方を表すことができます。オペランドの 1 つが文字列の場合、それは文字列の連結です。

3. オブジェクトは、value Of メソッドを通じてそれ自体を数値に変換し、toString メソッドを通じてそれ自体を文字列に変換します。

4. Of メソッドの値を持つオブジェクトは、文字列形式で等しい数値を返すように対応する toString メソッドを定義する必要があります。

5. 一部の未定義変数を検出する場合は、直接真値演算を行うのではなく、型 Of または未定義との比較を使用する必要があります。

関連する推奨事項:

JS 暗黙的型変換の概要

暗黙的変換を使用するには?暗黙的変換例の使用法をまとめます

JavaScriptデータ型の暗黙的型変換の簡単な紹介_javascriptスキル

以上が暗黙的な型変換とは何ですか? JSの暗黙的な型変換の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。