這篇文章帶給大家的內容是關於js中物件轉換成字串、數字和布林值方法介紹(範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
規則:
1、如果物件有toString方法,則呼叫該方法,並傳回對應的結果;(程式碼通常會執行到這,因為在所有物件中都有toString方法)
2、如果物件有valueOf方法,則呼叫該方法,並傳回對應的結果;
3、否則拋出異常。
通常,所有物件都有toString方法,內建物件都有自己toString方法的實作
alert( {key: 'value'} ) // [object Object]
alert( [1,2] ) // "1,2"
alert( new Date() ) // "Sat Sep 15018 15018 150#10150 (1501015020 (15022:015 G1202015):1502011502022 G115): #在介面輸出中, 例如alert() 和document.write() ,將優先調用toString,如果過得不到標量或undefined、null ,再嘗試valueOf ,如果仍然回傳物件則報錯。
可以自訂toString()
var obj = { age:23, toString:function(){ return this.age; } } obj.toString();//23
二、物件轉換成數字
函數裡邊的參數需要是數字,如: Math.sin(obj) / isNaN(obj) 以及算術運算子: obj ;
用於比較,如:obj == 'John'
PS :以下兩種比較不會發生型別轉換,
a)在嚴格比較(===)中,不會發生任何的型別轉換,
b)在非嚴格比較中,如果參數都是對象,不會發生型別轉換,通常,如果兩個對象引用統一對象,則傳回true.
轉換成數字的規則:
1、如果對像有valueOf方法,則呼叫該方法,並傳回對應的結果;
2、當呼叫valueOf傳回的依然不是數字,則會呼叫物件的toString方法,並傳回對應的結果;
3、否則拋出異常。
物件的valueOf方法傳回的是物件本身,而不是字串(例如陣列、函數,它們的valueOf方法是從Object.prototype上繼承下來的,預設行為是傳回物件本身),所以才會採用toString
對於物件型參與 算術運算和 "==" 運算, 不等於比較元算(> 、f539a70d3ea090bac4faa80192f58ccc=、<=),自動發生資料型別轉換,先呼叫 valueOf ,如果 valueOf 不能傳回標量(number、string、boolean) 和 undefined、 null ,
將繼續呼叫 toString, 如果仍然傳回物件型數據,報錯。
Date 類型的例外: 在 和 == 運算中,優先 toString ,這應該是規範對該資料類型的特殊對待。
#補充:呼叫valueOf()的結果:
返回結果 | |
拋出TypeError異常 | |
拋出TypeError例外 | |
#Number | |
String | |
Boolean |
可以重写对象的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中文網其他相關文章!