[] == {} // false
这是为什么呢?
另外
{} == [] // error
直接报错
对象字面量定义使用的是{}
,而语句块边界也是{}
。难道没想过JS引擎如何区分两者的?
一般{}
作为对象的情况有:
()
包裹。console.log({}) // 右值:作为函数实参
// 语句
{
name: 1
}
// 右值:作为对象
var a = {
name: 1
}
console.log(a)
1 < {} // false, 运算符右边作为对象
// 类似"()"包裹了,也是作为对象
console.log({} == [])
13 回答12.8k 阅读
7 回答2k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答938 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.3k 阅读✓ 已解决
js中块结构和对象的写法都是
{}
,默认的语法前面的{}
会被当作块结构,就像你下面的写法,所以这里会因为语法问题抛出错误,一般的需要用括号包起来:({}) == []
再回到类型转换,两个引用类型的值进行比较,无论是相等还是全等,都是进行值比较,而不会发生类型转换。