ホームページ > 記事 > ウェブフロントエンド > jsでオブジェクトを文字列、数値、ブール値に変換する方法の紹介(例)
この記事の内容は、js でオブジェクトを文字列、数値、ブール値に変換する方法の紹介 (例) です。必要な方は参考にしていただければ幸いです。あなたに助けられました。
ルール:
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 が再試行されます。エラーが報告されます。
toString()
var obj = { age:23, toString:function(){ return this.age; } } obj.toString();//23
をカスタマイズできます。 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() を呼び出した結果:
結果を返す | 未定義TypeError 例外をスローする |
Null | TypeError 例外をスローします |
#Number | 渡されたパラメータ値を内部初期値とする Number オブジェクトを作成します |
#String | 内部初期値が渡されたパラメータ値である String オブジェクトを作成します |
渡されたパラメータ値を内部初期値とするブール型オブジェクトを作成します | |
オブジェクト自体# ##############################
可以重写对象的valueOf()方法(百度一道面试题,定义一个对象,使obj == '1' ,结果为true): var obj = { valueOf: function(){ return 1; } }; console.log(obj == '1');//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でオブジェクトを文字列、数値、ブール値に変換する方法の紹介(例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。