【发布时间】:2023-02-01 14:51:58
【问题描述】:
在 ES5 中,抽象相等比较算法:
如果Type(X) 为布尔型,返回比较结果 ToNumber(X) ==是.
To Number转换算法:如果x是一个Object,第一步是获取primValue,然后返回ToNumber(primValue)。
原始转换算法:返回对象的默认值。对象的默认值通过调用对象的 [[DefaultValue]] 内部方法来检索,传递可选的提示首选类型。
[[DefaultValue]] 使用“valueOf”方法,并返回一个原始值。
问题是:Object.ValueOf 方法获取的是对象值而不是原始值。这让我很困惑。
let a=[]
let b=a.valueOf()// object a
console.log(b)
let c=a.toString()//undefined
console.log(c)
typeof b //object
typeof c //string
【问题讨论】:
-
JavaScript 在比较值和加法时总是会进行奇怪的类型转换。使用
===比较值。如果两个值具有不同的类型并避免混杂的类型转换,它会返回false。
标签: javascript