JavaScript のデータ型は、null、unknown、boolean、string、number、object の 6 つの型に分類されます。 object は参照型で、他の 5 つは基本型またはプリミティブ型です。 typeof メソッドを使用して、何かがどのタイプに属しているかを出力できます。異なる型の変数を比較するには、まず型を変換する必要があります。これを型変換といいます。型変換は暗黙的な変換とも呼ばれます。暗黙的な変換は通常、加算、減算、乗算、除算、等しい、より小さい、より大きいなどの演算子を使用して発生します。 。
1. 値型間のデータ型変換:
JavaScript のデータ型については、JavaScript データ型の詳細な説明の章を参照してください。
(1). 数値と文字列に + 演算子を使用します。
数値と文字列に + 演算子を使用すると、まず数値が文字列に変換され、次に文字列の連結演算が実行されます。
var antzone = "antzone"; var num = 8; console.log(antzone+num);
(2). ブール値を含む + 演算子演算:
ブール型が関係している場合、まずブール値が対応する数値または文字列に変換され、次に対応する文字列接続が行われます。または算術演算が実行されます。
var bool = true; var num = 8; console.log(bool + num);
上記のコードは、まず true を数値 1 に変換し、次に算術加算を実行します。
var bool = true; var num = "8"; console.log(bool + num);
上記のブール値は、対応する文字列形式「true」に変換され、文字列の連結が実行されます。
(3). 減算演算:
減算演算が実行される場合、まず両方のオペランドが数値に変換され、次に算術演算が実行されます:
var bool = true; var num = "8"; console.log(bool - num);
true は数値 1 に変換されます。 , 文字列「8」は数字の8に変換されて算術演算が行われます。
乗算、除算、より大きい、より小さい、引き算の変換についても同様なので、例は示しません。
(4).== 等価演算:
unknown と null はどちらも == 演算子を使用して true を返します。
console.log(undefined==null);
他の値型を比較する場合、オペランドは数値に変換されます
console.log("3"==3);
上記のコードは文字列「3」を数値に変換して比較します。
console.log("1"==true);
上記のコードは、「1」とtrueをそれぞれ数値に変換して比較します。
2. 参照型から値型への変換:
参照型 (オブジェクト) から値型への変換は、以下で説明されています。
オブジェクト継承の 2 つのメソッドは、オブジェクトから値型への変換関数を実現するのに役立ちます:
(1).toString() メソッド。
(2).valueOf() メソッド。
通常、オブジェクトを文字列に変換するには toString() メソッドを呼び出す必要があり、オブジェクトを数値に変換するには valueOf() メソッドを呼び出す必要があると思いますが、それはそれほど単純ではありません実際に適用される場合は、次のコード例を参照してください。
var obj = { webName: "phpcn", url:"php.cn" } console.log(obj.toString());
上記のコードからわかるように、toString() メソッドは、オブジェクトをこのオブジェクトを反映する文字列に変換しません。
var arr = [1, 2, 3]; console.log(arr.valueOf());
上記のコードからわかるように、valueOf() メソッドはオブジェクトを、このオブジェクトを反映する数値に変換しません。
var arr = [1, 2, 3]; console.log(arr.toString());
配列オブジェクトの toString() メソッドは、配列をこの配列オブジェクトを反映する文字列に変換できます。
は次のように要約されます:
(1)。最初の例のように、一部のオブジェクトは単に toString() または valueOf() メソッドを継承します。
(2). 一部のオブジェクトは 2 つのメソッドを継承するだけでなく、それらを書き換えます。
つまり、オブジェクト メソッドの中には、文字列または数値に変換するという目標を達成できるものと、達成できないものがあります。
toString() または valueOf() を呼び出してオブジェクトを文字列または数値に変換するための規則は次のとおりです。
toString() を呼び出すとき、オブジェクトにこのメソッドがある場合、このメソッドが返された場合はこのメソッドが呼び出されます。値型データ。次に、この値型データを返し、コンテキストに従って関連するデータ型変換を実行します。 toString() が存在しない場合、またはこのメソッドの戻り値が値型データでない場合は、 valueOf() が呼び出されます (このメソッドが存在する場合)。 valueOf() が値型データを返す場合は、関連するデータ型変換を実行するコンテキスト環境。
さらなる説明:
(1). 上記は、デフォルトでの valueOf() メソッドと toString() メソッドの関数 (オブジェクトを数値または文字列に変換する) を説明していますが、これは厳密で高速な関数ではないことに注意してください。つまり、 valueOf() メソッドが数値を返す必要も、 toString() メソッドが文字列に変換される必要もありません。たとえば、単純に継承されたこれら 2 つのメソッドは、への変換機能を実装できません。別の例として、これら 2 つのメソッドを高く評価することもできます。戻り値は数値や文字列である必要はありません。
(2).还有需要特别注意的一点就是,很多朋友认为,转换为字符串首先要调用toString()方法, 其实这是错误的认识,我们应该这么理解,调用toString()方法可以转换为字符串,但不一定转换字符串就是首先调用toString()方法。
看如下代码实例:
var arr = []; arr.valueOf = function () { return "1"; } arr.toString = function () { return "2"; } console.log(arr + "1");
上面的代码中,arr是要被转换为字符串的,但是很明显是调用的valueOf()方法,而没有调用toString()方法。有些朋友可能会有这样的质疑,难道[2]这样的数字转换成字符串"2",不是调用的toString()方法吗。
代码如下:
var arr = [2]; console.log(arr + "1");
其实过程是这样的,首先arr会首先调用valueOf()方法,但是数字的此方法是简单继承而来,并没有重写(当然这个重写不是我们实现),返回值是数组对象本身,并不是一个值类型,所以就转而调用toString()方法,于是就实现了转换为字符串的目的。
总结如下:
大多数对象隐式转换为值类型都是首先尝试调用valueOf()方法。但是Date对象是个例外,此对象的valueOf()和toString()方法都经过精心重写,默认是调用toString()方法,比如使用+运算符,如果在其他算数运算环境中,则会转而调用valueOf()方法。
代码实例如下:
var date = new Date(); console.log(date + "1"); console.log(date + 1); console.log(date - 1); console.log(date * 1);
以上がJavaScriptの値型と参照型の変換使用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。