这个平等(==
)运算符检查其两个操作数是否相等,返回布尔结果。与严格平等操作员,它试图转换和比较不同类型的操作数。
等式运算符(==
和!=
)提供IsLoosely相等语义的。这可以大致概括如下:
- 如果操作数具有相同的类型,则按如下方式进行比较:
- 对象:return
真的
只有当两个操作数引用同一对象时。
- 字符串:return
真的
只有当两个操作数具有相同顺序的相同字符时。
- 编号:return
真的
只有当两个操作数具有相同的值时。+0
和-0
被视为相同的值。如果任一操作数为硝酸钠
,返回假
; 所以,硝酸钠
永远不等于硝酸钠
.
- 布尔值:返回
真的
仅当操作数都是真的
或两者兼而有之假
.
- BigInt:返回
真的
只有当两个操作数具有相同的值时。
- 符号:return
真的
只有当两个操作数引用相同的符号时。
- 如果其中一个操作数为
无效的
或未定义
,另一个也必须是无效的
或未定义
返回真的
。否则返回假
.
- 如果其中一个操作数是对象,另一个是基本体,将对象转换为基本体.
- 在这一步中,两个操作数都被转换为原语(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====空
是假
.
1 == 1; // 真的“你好”==“你好”;//真的
"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;//假
常量对象1={key:“value”,};常量对象2={key:“值”,};console.log(对象1==对象2);//假console.log(对象1==对象1);//真的
请注意,使用新建字符串()
是对象。如果你将其中一个与字符串文字进行比较字符串
对象将是转换为字符串文字,内容将被比较。然而,如果两者都是操作数是字符串
对象,然后将它们作为对象进行比较,并且必须引用同一对象进行比较以成功:
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);//真的
const d=新日期(“1995-12-17T03:24:00”);常量s=d.toString();//例如:“1995年12月17日星期日03:24:00 GMT-0800(太平洋标准时间)”console.log(d==s)//真的
常数a=[1,2,3];const b=“1,2,3”;a==b;//true,`a`转换为字符串常数c=[真,0.5,“嘿”];const d=c.toString();//“没错,0.5,嘿”c==d;//真的
BCD表仅在浏览器中加载