valueOf 和 toString
所有数据类型中,除了null,其他的所有数据类型都有这两个东西。
当数字或对象需要隐式转换时,比如 == ,此时会用到对象上面的 toString(), **valueOf()**方法转换。
通常valueOf是负责将对象转换成它的原始值,本身就是原始值时,则
valueOf
将返回对象本身。toString主要用于展示,将对象或者基本类型的值转换成字符串。object.toString() 得到的是 [Object, Object]
Date() 对象是个意外,Date.valueOf()会返回1970年到现在的时间戳,是一个数字。
toString和valueOf的优先级
- 正常情况下,先掉用toString
- 当存在运算符时,优先调用valueOf
- 当发现value运算不了时,还是会再次调用tostring
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf
== 的比较方式
- 当两边数据类型相同时,直接比较两边的数据是否相等,并且指向的内存也要相等**[] == [] // false**
- 当两边数据类型不同时,先做类型转换,
- 当两边都是值类型时,将两边都转换成数字比较。Number(值类型) == Number(值类型)
- 当两边有的是引用类型时,调用它的valueOf方法,将引用类型转换成值类型,再比较。如果调用valueOf后发现依然不是原始类型,调用它的toString后,再比较。如果都不能变成原始值,就报错TypeError
- 当引用类型和数字相比较时,将引用类型转成数字,再比较