ホームページ  >  記事  >  ウェブフロントエンド  >  jsでオブジェクトを文字列、数値、ブール値に変換する方法の紹介(例)

jsでオブジェクトを文字列、数値、ブール値に変換する方法の紹介(例)

不言
不言オリジナル
2018-09-15 17:30:282229ブラウズ

この記事の内容は、js でオブジェクトを文字列、数値、ブール値に変換する方法の紹介 (例) です。必要な方は参考にしていただければ幸いです。あなたに助けられました。

1. オブジェクトを文字列に変換します。

ルール:

1. オブジェクトに toString メソッドがある場合は、そのメソッドを呼び出して、対応する結果を返します。すべてのオブジェクトに toString メソッドがあるため、コードは通常この時点まで実行されます)

2. オブジェクトに valueOf メソッドがある場合は、そのメソッドを呼び出し、対応する結果を返します。 #3. それ以外の場合は例外が発生しました。

通常、すべてのオブジェクトには toString メソッドがあり、組み込みオブジェクトには toString メソッドの独自の実装があります。

alert({key: 'value'}) // [object Object]

alert( [1,2] ) // "1,2"

alert( new Date() ) // "Sat Sep 15 2018 15:58:01 GMT 0800 (China Standard Time)"

alert() や document.write() などのインターフェイス出力では、スカラー、未定義、または null が取得できない場合は、toString が最初に呼び出されます。オブジェクトがまだ返される場合は、valueOf が再試行されます。エラーが報告されます。

実際には、parseInt()、alert()、document.write() などの関数の呼び出しでは、パラメータの型変換が「受動的」であるとみなされる必要があり、関数の実装が優先されます。 toString を呼び出すと、非データ オブジェクトは自動的に toString を呼び出します。


toString()

var obj = {
    age:23,
    toString:function(){        
    return this.age;
    }
}
obj.toString();//23

をカスタマイズできます。 2. オブジェクトを数値に変換する

数値に変換する必要がある主な状況は 2 つあります。

関数内では、パラメータは Math.sin(obj) / isNaN(obj) のような数値である必要があり、算術演算子: obj;

は、obj == 'John'# のように比較に使用されます。

##PS : 次の 2 つの比較では型変換は行われません。

a) 厳密な比較 (===) では、型変換は行われません。非厳密比較。パラメータがすべてオブジェクトの場合、型変換は行われません。通常、2 つのオブジェクトが同じオブジェクトを参照する場合、

#数値への変換ルール:

# が返されます。 ##1. オブジェクトに valueOf メソッドがある場合は、そのメソッドを呼び出し、対応する結果を返します。

2. valueOf を呼び出しても valueOf が返されない場合は、オブジェクトの toString メソッドが呼び出され、対応する結果が返されます。

3. それ以外の場合は、例外がスローされます。

オブジェクトの valueOf メソッドは、文字列ではなくオブジェクト自体を返します (配列や関数など、それらの valueOf メソッドは Object.prototype から継承され、デフォルトの動作ではオブジェクト自体を返します)。オブジェクトタイプの参加には toString

を使用します 算術演算および「==」演算は比較演算 (>、f539a70d3ea090bac4faa80192f58ccc=、<=) と等しくありません。データ型変換は最初に自動的に呼び出されます。 valueOf がスカラー (数値、文字列、ブール値) を返せず、未定義、null の場合、

は引き続き toString を呼び出します。それでもオブジェクト型データを返す場合は、エラーが報告されます。

Date 型の例外: および == 操作では、toString が優先されます。これは、仕様でこのデータ型を特別に扱う必要があります。

#補足: valueOf() を呼び出した結果:



パラメータの種類

##Boolean渡されたパラメータ値を内部初期値とするブール型オブジェクトを作成します##オブジェクト
結果を返す 未定義TypeError 例外をスローする
Null TypeError 例外をスローします
#Number 渡されたパラメータ値を内部初期値とする Number オブジェクトを作成します
#String 内部初期値が渡されたパラメータ値である String オブジェクトを作成します
オブジェクト自体# ##############################

 

 

 

 

 

 


可以重写对象的valueOf()方法(百度一道面试题,定义一个对象,使obj == '1' ,结果为true):

var obj = {
    valueOf: function(){       
    return 1;
    }
};
console.log(obj == &#39;1&#39;);//true

三、对象转化成布尔值:

对象在JS中总是返回true

根据上述,对象在相等性判断中如何转变?

在布尔上下文中, a是true , b是false,a == b,这是可能的 。

 [] == ![] //true

内部的转化步骤:

1、右边是![],将会被转换成一个布尔值,[]为true,取非为false,此时表达式变成:

[]==false;

2、按照规则,右边是布尔值,将false转换成0,左边是数组,数组也将进行数字转换,先调用valueOf(),不能转化成原始值,再用toString(),转换为0

0 == 0

 3、结果为true

补充 == 和!=判断规则(注意: ===!==  和 对象==对象 这三种情况不会进行类型转换):

如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值----false转化为0,true转化为1;

如果有一个数是字符串,另一个操作数是数值,将字符串转化成数值;

如果一个操作数是对象,另一个操作数不是对象,将对象转化为基本操作类型(先valueOf()再toString(),均不能得到基本类型的值则会报错),再比较。

所以,对象在相等性判断中:

若两边都是对象,不会进行类型转换,为同一个引用才会返回true

若只有一边为对象,则会先调用对象的valueOf()方法,不能返回基本类型,再调用对象的toString()方法,还是不能就会报错,否则用转化后的基本类型值继续进行判断

举例,感受下~:
[]==[]//false
[]==false//true
!![]//true
[]==![]//true

总结:

在JavaScript中,对象有三个转换,这取决于具体情况:

字符串输出,使用toString 。

数字:数学函数,操作符,使用valueOf 后使用 toString 。

布尔值:转化为true。

 相关推荐:

js中json字符串和json对象互相转化的方法实现

js中json对象和字符串相互转化操作实例

以上がjsでオブジェクトを文字列、数値、ブール値に変換する方法の紹介(例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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