前奏 看看 ==

N表示ToNumber操作,即将操作数转为数字。

P表示ToPrimitive操作,即将操作数转为原始类型的值(Undefined、Null、Boolean、Number和String等五种)

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

  • 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为非原始类型时,两个方法都不调其实。

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

2.都重写时: 有操作符 且 valueOf()返回值是原始类型   :valueOf()优先级高于toString()

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

3. 都重写时: 有操作符 且 valueOf()返回值是非原始类型   :两个方法都调(先调用 valueOf() 再 toString() ) 给人一种假象 toString()优先级高于valueOf()

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

4. 只重写了 toString() :  toString()优先级高于valueOf()

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

5.只重写了valueOf() :  valueOf()优先级高于toString()

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

6.都不重写 :默认调用的valueof() :可以通过== 和 === 比较看。

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

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

7. console 中打印展示 有可能 不调用 valueOf  而并非  [1,2] 和 [1,2] 为两块地址而显示false 的理解。

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

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

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

拓展:toString()可以判断数据类型

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

 

遗留的问题:图上的报错说对象不能转化成基本类型 为什么?希望大家能帮我解答哈

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

相关文章: