首頁 >web前端 >js教程 >js中物件轉換成字串、數字和布林值方法介紹(範例)

js中物件轉換成字串、數字和布林值方法介紹(範例)

不言
不言原創
2018-09-15 17:30:282248瀏覽

這篇文章帶給大家的內容是關於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 ,如果仍然回傳物件則報錯。

其實parseInt()、 alert()、 document.write() 這些函數的呼叫中,參數所進行的型別轉換,應視為"被動的" , 是函數的實作方式使其優先呼叫toString, 而非資料對象自動呼叫toString。


可以自訂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()的結果:

##參數類型返回結果#UndefinedNull建立一個Number對象,它內部的初始值為傳入的參數值建立一個String對象,它內部的初始值為傳入的參數值建立一個Boolean對象,它內部的初始值為傳入的參數值
拋出TypeError異常
拋出TypeError例外
#Number
String
Boolean
###############Object###### ######物件本身################

 

 

 

 

 

 


可以重写对象的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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn