关于js类型转换的问题

[] == {}  // false

这是为什么呢?
另外

{} == [] // error

直接报错

阅读 1.8k
3 个回答

js中块结构和对象的写法都是{},默认的语法前面的{}会被当作块结构,就像你下面的写法,所以这里会因为语法问题抛出错误,一般的需要用括号包起来:({}) == []

再回到类型转换,两个引用类型的值进行比较,无论是相等还是全等,都是进行值比较,而不会发生类型转换。

后者不涉及类型转换错误,而是语法错误。

对象字面量定义使用的是{},而语句块边界也是{}。难道没想过JS引擎如何区分两者的?
一般{}作为对象的情况有:

  1. 作为右值;
  2. 出现在运算符的右边;
  3. 使用()包裹。
console.log({}) // 右值:作为函数实参

// 语句
{
    name: 1
}

// 右值:作为对象
var a = {
    name: 1
}

console.log(a)

1 < {} // false, 运算符右边作为对象

// 类似"()"包裹了,也是作为对象
console.log({} == []) 
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题