等式(==)

这个平等(==)运算符检查其两个操作数是否相等,返回布尔结果。严格平等操作员,它试图转换和比较不同类型的操作数。

试试看

语法

js型
x==y

描述

等式运算符(==!=)提供IsLoosely相等语义的。这可以大致概括如下:

  1. 如果操作数具有相同的类型,则按如下方式进行比较:
    • 对象:return真的只有当两个操作数引用同一对象时。
    • 字符串:return真的只有当两个操作数具有相同顺序的相同字符时。
    • 编号:return真的只有当两个操作数具有相同的值时。+0-0被视为相同的值。如果任一操作数为硝酸钠,返回; 所以,硝酸钠永远不等于硝酸钠.
    • 布尔值:返回真的仅当操作数都是真的或两者兼而有之.
    • BigInt:返回真的只有当两个操作数具有相同的值时。
    • 符号:return真的只有当两个操作数引用相同的符号时。
  2. 如果其中一个操作数为无效的未定义,另一个也必须是无效的未定义返回真的。否则返回.
  3. 如果其中一个操作数是对象,另一个是基本体,将对象转换为基本体.
  4. 在这一步中,两个操作数都被转换为原语(String、Number、Boolean、Symbol和BigInt之一)。其余的转换是逐个案例完成的。
    • 如果它们属于同一类型,请使用步骤1进行比较。
    • 如果一个操作数是Symbol,而另一个不是,则返回.
    • 如果其中一个操作数是布尔值,而另一个不是,将布尔值转换为数字:真的转换为1,并且已转换为0。然后再次松散地比较这两个操作数。
    • 数字到字符串:将字符串转换为数字。转换失败导致硝酸钠这将保证平等.
    • Number to BigInt:通过其数值进行比较。如果数字为±无穷大或硝酸钠,返回.
    • String to BigInt:使用与BigInt()构造函数。如果转换失败,则返回.

宽松的平等是对称的:A==B始终具有与相同的语义B==A对于的任何值A类B(应用转换的顺序除外)。

此运算符与严格平等(===)运算符表示严格相等运算符不尝试类型转换。相反,严格相等运算符始终认为不同类型的操作数不同。严格相等运算符实际上只执行步骤1,然后返回对于所有其他情况。

上述算法存在“故意违反”:如果其中一个操作数是文档.all,它被视为未定义。这意味着document.all==空真的,但是document.all===未定义&&document-all====空.

示例

与无类型转换的比较

js型
1 == 1; // 真的“你好”==“你好”;//真的

与类型转换的比较

js型
"1" == 1; // 真的1 == "1"; // 真的0==假;//真的0==空;//0==未定义;//0 == !!null;//true,查看Logical NOT运算符0 == !!未定义;//true,查看Logical NOT运算符null=未定义;//真的const number1=新数字(3);常量编号2=新编号(3);数字1==3;//真的number1==number2;//

对象的比较

js型
常量对象1={key:“value”,};常量对象2={key:“值”,};console.log(对象1==对象2);//console.log(对象1==对象1);//真的

比较字符串和字符串对象

请注意,使用新建字符串()是对象。如果你将其中一个与字符串文字进行比较字符串对象将是转换为字符串文字,内容将被比较。然而,如果两者都是操作数是字符串对象,然后将它们作为对象进行比较,并且必须引用同一对象进行比较以成功:

js型
const字符串1=“hello”;const string2=字符串(“hello”);const string3=新字符串(“hello”);const string4=新字符串(“hello”);console.log(字符串1==字符串2);//真的console.log(字符串1==字符串3);//真的console.log(字符串2==字符串3);//真的console.log(字符串3==字符串4);//console.log(字符串4==字符串4);//真的

比较日期和字符串

js型
const d=新日期(“1995-12-17T03:24:00”);常量s=d.toString();//例如:“1995年12月17日星期日03:24:00 GMT-0800(太平洋标准时间)”console.log(d==s)//真的

比较数组和字符串

js型
常数a=[1,2,3];const b=“1,2,3”;a==b;//true,`a`转换为字符串常数c=[真,0.5,“嘿”];const d=c.toString();//“没错,0.5,嘿”c==d;//真的

规格

规范
ECMAScript语言规范
#秒相等运算符

浏览器兼容性

BCD表仅在浏览器中加载

另请参见