ホームページ  >  記事  >  ウェブフロントエンド  >  Javascript型変換ルール例 分析_JavaScriptスキル

Javascript型変換ルール例 分析_JavaScriptスキル

WBOY
WBOYオリジナル
2016-05-16 15:13:581167ブラウズ

型変換は、暗黙的変換と明示的変換に分けられます。いわゆる暗黙的変換は実行時にプログラムによって実行される自動変換であり、明示的変換は人為的に型を強制的に変換することです。 Javascript 変数は緩やかに型付けされており、JavaScript でサポートされているあらゆるデータ型を格納でき、その変数の型は実行時に動的に変更できます。説明書をご覧ください

例:

var n = 10;
n = "hello CSSer!";
n = {};

上記の例では、まず n 変数を宣言してその値を 10 (整数型) に初期化し、次に文字列「hello CSSer!」を n に割り当て、次にオブジェクトを割り当てます。最後に n の型は次のようになります。オブジェクトタイプ。変数 n の型は動的であることがわかります。実際のプログラミングでは、デバッグには良くないため、変数の型を頻繁に変更しないことをお勧めします。

JavaScript の変数の型は動的であるため、プログラムの実際の実行中に型変換の概念を使用する必要があります。型変換は、暗黙的変換と明示的変換に分けられます。いわゆる暗黙的変換は実行時にプログラムによって実行される自動変換であり、明示的変換は人為的に型を強制的に変換することです。この記事ではJavaScriptの型変換についてまとめます。

明示的な変換

手動で型変換を実行することにより、JavaScript は次の変換関数を提供します。

数値型に変換: Number(mix)、parseInt(string,radix)、parseFloat(string)
文字列型に変換: toString(radix), String(mix)
ブール型に変換: Boolean(mix)

1. Number(mix)関数は、任意のタイプのパラメータミックスを数値タイプに変換できます。ルールは次のとおりです:

1. ブール値の場合、true と false はそれぞれ 1 と 0 に変換されます

2. 数値の場合はそれ自体を返します。

3. null の場合は 0 を返します。

4. 未定義の場合は NaN を返します。

5. 文字列の場合は、次の規則に従います。

6.

1. 文字列に数字のみが含まれている場合は、10 進数に変換します (先頭の 0 を無視します)

2. 文字列に有効な浮動小数点形式が含まれている場合は、浮動小数点値に変換します (先頭の 0 を無視します)

3. 空の文字列の場合は、0 に変換します

4. 文字列に上記以外の形式が含まれている場合は、NaN に変換します

7. オブジェクトの場合は、オブジェクトの valueOf() メソッドを呼び出し、戻り値を前述の規則に従って変換します。変換の結果が NaN の場合は、オブジェクトの toString() メソッドを呼び出し、返された文字列値を前のルールに従って再度変換します。

次の表は、オブジェクトの valueOf() の戻り値を示しています。


下面提供几个例子,你能写出它的正确结果吗:

Number("hello CSSer!");//NaN
Number("0x8");//8
Number("");//0
Number("020dd");//NaN
Number("070");//70
Number(true);//1

2、parseInt(string, radix)函数,将字符串转换为整数类型的数值。它也有一定的规则:

1.忽略字符串前面的空格,直至找到第一个非空字符

2.如果第一个字符不是数字符号或者负号,返回NaN

3.如果第一个字符是数字,则继续解析直至字符串解析完毕或者遇到一个非数字符号为止

4.如果上步解析的结果以0开头,则将其当作八进制来解析;如果以0x开头,则将其当作十六进制来解析

对象 操作
Array 将 Array 的元素转换为字符串。结果字符串由逗号分隔,且连接起来。
Boolean 如果 Boolean 值是 true,则返回 “true”。否则,返回 “false”。
Date 返回日期的文字表示法。
Error 返回一个包含相关错误信息的字符串。
Function 返回如下格式的字符串,其中 functionname 是被调用 toString 方法函数的名称:

function functionname( ) { [native code] }

Number 返回数字的文字表示。
String 返回 String 对象的值。
默认 返回 “[object objectname]”,其中 objectname 是对象类型的名称。

5.如果指定radix参数,则以radix为基数进行解析

小测验:

parseInt("hello CSSer!");//NaN
parseInt("0x8");//8
parseInt("");//NaN
parseInt("020dd");//20
parseInt("070");//70
parseInt("22.5");//22

3. parseFloat(string) 関数は、文字列を浮動小数点型の値に変換します。

そのルールは基本的に parseInt と同じですが、いくつかの違いがあります。文字列内の最初の小数点記号は有効であり、文字列に整数として解析できる数値が含まれている場合、parseFloat は先頭の 0 をすべて無視します。の場合、浮動小数点値ではなく整数値が返されます。

4. toString(radix) メソッド。未定義と null を除くすべてのタイプの値には、オブジェクトの文字列表現を返す toString() メソッドがあります。

5. String(mix) 関数は、任意のタイプの値を文字列に変換します。

1. toString() メソッドがある場合は、(基数パラメータを渡さずに) このメソッドを呼び出し、結果を返します

2. null の場合は、「null」を返します

3. 未定義の場合は、「未定義」を返します

6. ブール (ミックス) 関数。任意のタイプの値をブール値に変換します。

次の値は false に変換されます: false、""、0、NaN、null、未定義、およびその他の値は true に変換されます。

暗黙的な変換

場合によっては、明示的な変換を提供しなくても、JavaScript は自動的に型変換を実行します。主な状況は次のとおりです。

1. 数値以外の値であるかどうかを検出するために使用される関数: isNaN(mix)

isNaN() 関数は、テストの結果、Number() を使用してパラメーター値を変換しようとすることが判明しました。結果が「非数値」の場合は true を返し、それ以外の場合は false を返します。

2. インクリメント演算子およびデクリメント演算子 (前置および後置を含む)、単項の正および負の符号演算子

これらの演算子は、あらゆるデータ型の値に適用できます。値の種類が異なる場合、演算子は次の規則に従います (比較後、その規則は基本的に Number() 規則と同じであることがわかります)。 🎜>

1. 有効な数字を含む文字列の場合は、まず数値に変換します (変換規則は 1 の加算と減算の演算を実行した後、文字列変数は になります)。数値変数。


2. 有効な数字が含まれていない文字列の場合、変数の値を NaN に設定すると、文字列変数は数値変数になります。


3. ブール値 false の場合は、まず 0 に変換し、次に 1 を加算または減算する操作を実行します。ブール値変数は数値変数としてプログラムされます。


4. ブール値 true の場合は、まず 1 に変換し、次に 1 を加算または減算する演算を実行します。ブール値変数は数値変数になります。


5. 浮動小数点値の場合は、1を加算または減算する演算を実行します。


6. オブジェクトの場合は、まずオブジェクトの valueOf() メソッドを呼び出してから、戻り値に前述のルールを適用します。結果が NaN の場合、前のルールが適用される前に toString() メソッドが呼び出されます。オブジェクト変数は数値変数になります。


クイズ:


次のタイプの値に対してポストインクリメント操作を実行すると、結果はどうなりますか?


「2″、”02dd”、””、false、22.5、+””、-false、+new Date()


3. 加算演算子


プラス記号演算子は Javascript の文字列連結演算子としても使用されるため、プラス記号演算子のルールは 2 つの状況に分けられます。


•両方のオペランド値が数値の場合、ルールは次のとおりです:


1. オペランドが NaN の場合、結果は NaN になります


2. Infinity+Infinity の場合、結果は Infinity


3. -Infinity+(-Infinity) の場合、結果は -Infinity


4. Infinity+(-Infinity) の場合、結果は NaN


5. +0+(+0) の場合、結果は +0


6. (-0)+(-0) の場合、結果は -0


7. (+0)+(-0) の場合、結果は +0


•操作値の 1 つが文字列の場合:


1. 両方の演算値が文字列の場合、それらを連結します


2. 演算値が 1 つだけ文字列の場合、他の演算値を文字列に変換して連結します


3. オペランドがオブジェクト、数値、またはブール値の場合は、toString() メソッドを呼び出して文字列値を取得し、前述の文字列ルールを適用します。

の場合

未定義と null の場合は、それぞれ String() を呼び出して明示的に文字列に変換します。


加算演算では、一方の演算値が文字列型の場合、もう一方の演算値は文字列に変換され、最終的に連結されることがわかります。


4. 乗算と除算、マイナス演算子、モジュロ演算子


これらの演算子は演算用であるため、共通点があります。オペランド値の 1 つが数値でない場合、変換のために Number() 関数が暗黙的に呼び出されます。各動作の詳細なルールについてはECMAScriptの定義を参照してください。


5. 論理演算子 (!、&&、||)


論理 NOT (!) 演算子は、まず Boolean() 関数を通じて演算値をブール値に変換し、次にそれを否定します。


論理 AND (&&) 演算子。演算値がブール値ではない場合、次の変換ルールに従います。


1. Boolean() による変換後に最初のオペランドが true の場合は 2 番目の演算値が返され、それ以外の場合は最初の値 (Boolean() による変換後の値ではない) が返されます。


2. 演算値が null の場合、null を返します

3. 演算値が NaN の場合、NaN を返します

4. 演算値が未定義の場合は、未定義を返します

論理 OR (||) 演算子。演算値がブール値でない場合は、次の規則に従います。

1. Boolean() で変換された最初の演算値が false の場合は 2 番目の演算値が返され、それ以外の場合は最初の演算値 (Boolean() で変換された値ではない) が返されます。

2. 未定義、null、NaN の処理規則は論理積 (&&) と同じです


6. 関係演算子 (f539a70d3ea090bac4faa80192f58ccc、c01ab7558a89e9d1f72129289fb27741=)


上記の演算子と同様、関係演算子のオペランド値も任意の型にできるため、比較に数値以外の型を使用する場合、システムは暗黙的な型変換も必要とします。


1. 両方の演算値が数値の場合、数値比較を実行します


2. 両方の演算値が文字列の場合、文字列に対応する文字エンコード値を比較します


3. 片方の演算値のみが数値の場合、もう一方の演算値を数値に変換して数値比較を行います


4. オペランドがオブジェクトの場合は、valueOf() メソッドを呼び出します (オブジェクトに valueOf() メソッドがない場合は、toString() メソッドを呼び出します)。結果は前述のとおりになります。 >

ルール実行の比較


5. 演算値がブール値の場合は数値に変換して比較します


注: NaN は、それ自体を含め、どのタイプの値とも等しくありません。同時に、どのタイプの値と比較しても false を返します。


7. 等価演算子 (==)


等価演算子は、比較の前に演算値に対して暗黙的な変換を実行します:


1. 演算値がブール値の場合、比較前に数値に変換します。


2. 一方の演算値が文字列で、もう一方の演算値が数値の場合、Number() 関数を使用して文字列を数値に変換します。

3. 一方の操作値がオブジェクトで、もう一方がオブジェクトではない場合、オブジェクトの valueOf() メソッドが呼び出され、前のルールに従って結果が比較されます。

4.null と未定義は等しい

5. 演算値が NaN の場合、等価比較は false を返します

6. 両方の操作値がオブジェクトである場合、それらが同じオブジェクトを指しているかどうかを比較します

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