Q3.看看 toString() 和 valueOf() 到底怎麼回事?

前奏 看看 ==

N表示ToNumber操作,即將操作數轉爲數字。

P表示ToPrimitive操作,即將操作數轉爲原始類型的值(Undefined、Null、Boolean、Number和String等五種)

preview

  • undefined == null,結果是true。且它倆與所有其他值比較的結果都是false

  • String == Boolean,需要兩個操作數同時轉爲Number。

  • String/Boolean == Number,需要String/Boolean轉爲Number。

  • Object == Primitive,需要Object轉爲Primitive(具體通過valueOftoString方法)。

重點 看看 valueof() 和 toString()

      所有JS數據類型都擁有valueOf和toString這兩個方法,null和 undefined 除外。它們繼承自Object(即 Object.prototype.valueOf()和 Object.prototype.toString()),當然也可能被子類重寫。

    是否重寫 toString() 和 valueOf()  和  其返回值是否爲原始數據類型,影響比較結果

1. 都重寫時: 有操作符 且 valueOf()返回值是非原始類型 且 console.log( a == b) ,b爲非原始類型時,兩個方法都不調其實。

2.都重寫時: 有操作符 且 valueOf()返回值是原始類型   :valueOf()優先級高於toString()

3. 都重寫時: 有操作符 且 valueOf()返回值是非原始類型   :兩個方法都調(先調用 valueOf() 再 toString() ) 給人一種假象 toString()優先級高於valueOf()

4. 只重寫了 toString() :  toString()優先級高於valueOf()

5.只重寫了valueOf() :  valueOf()優先級高於toString()

6.都不重寫 :默認調用的valueof() :可以通過== 和 === 比較看。

7. console 中打印展示 有可能 不調用 valueOf  而並非  [1,2] 和 [1,2] 爲兩塊地址而顯示false 的理解。

拓展:toString()可以判斷數據類型

 

遺留的問題:圖上的報錯說對象不能轉化成基本類型 爲什麼?希望大家能幫我解答哈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章