62.==和===&toString和valueOf

2022-02-22  本文已影响0人  wo不是黄蓉

==和===

对于==的判断会先进行强制类型转换在确定操作数是否相等

ToPrimitive(input,preferedType)

preferedType:默认为Number

日期会被认为是字符串。

执行Number的步骤:

执行string的步骤:

比较规则:

[]==![]

valueof和toString

Type 测试 toString() valueOf
function (function a (){}).toString() 'function a (){}' function a(){},函数本身
Object ({}).toString() [object Object]、返回"[object 对象类型名称]" {}、对象本身
Date (new Date()).toString() Fri Jan 28 2022 09:00:12 GMT+0800 (中国标准时间),日期的文本表示 时间戳,毫秒数
String ('a').toString() "a",返回string对象的值 "a",字符串值
Number (1).toString() "1",返回字符串的数字表示,可以指定进制 1,数字值
Boolean (true).toString() "true",返回"true"or "false" true,boolean值
undefined undefined.toString() 报错 报错
null null.toString() 报错 报错
Array ([1,2].toString()) "1,2"相当于join方法 [1,2],数组本身

2022.2.23 补充
人生第一次读ECMA的文档,虽然比较难啃,但是比在网上查资料的效率高很多,最重要的是更加权威。里面一些因果讲的很清楚,自然而然一些疑惑就会解开了。
undefined.toString()和null.toString()方法会报错的原因,是因为其内部调用了toObject方法

undefined.valueOf()和null.valueOf()方法会报错的原因,是因为其内部调用了toObject方法

toObject方法原始类型返回其值,对象类型返回参数。

对象.toString为什么会返回"[object Object]"?

首先判断是否为undefined和null,不为undefined和null获取其参数的类型,其参数类型为Object,因此返回"[object Object]"。

ECMA262 toString方法判断逻辑:

valueOf方法返回调用toObject的结果。

参考1:==比较
参考2:ToPrimitive
参考3:toString

上一篇 下一篇

猜你喜欢

热点阅读