ホームページ >ウェブフロントエンド >jsチュートリアル >暗黙的な型変換とは何ですか? JSの暗黙的な型変換の概要
この記事では、暗黙的な型変換とは何か? 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 または未定義との比較を使用する必要があります。
関連する推奨事項:
JavaScriptデータ型の暗黙的型変換の簡単な紹介_javascriptスキル
以上が暗黙的な型変換とは何ですか? JSの暗黙的な型変換の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。