关系运算符
关系运算符用于测试两个值之间的关系,根据关系是否存在返回 true
或 false
,关系表达式的结果总是布尔值。
相等和不相等运算符
「==」和「===」用于比较两个操作数是否相等,相等返回 true
,否则返回 false
。「===」又称作严格相等运算符,不仅值相等,类型也要一致,而「==」则是比较宽松的值比较,必要时会进行类型转换。
「!=」和 「!==」是 「==」和「===」运算符的求反。
关于「===」运算符的注意项:
- NaN和任何值都不想等,包括它自身!判断
x
是否为 NaN 可以通过x!==x
来实现 - 如果两个引用值指向同一个对象、数组或函数,则它们是想等的,否则尽管值相同,也是不相等的
比较运算符
比较运算符用于测试两个值之间的大小关系,包括 <
、>
、<=
、>=
。只有数字和字符串才能进行比较操作,不是数字或字符串的操作数需要进行类型转换:
- 操作数为对象,如果
valueOf()
返回原始值,则直接使用这个原始值,否则使用toString()
的转换结果进行比较 - 对象转换为原始值后,如果两个操作数都是字符串,将依照字母表顺序进行比较
- 对象转换为原始值后,如果至少一个操作数不是字符串,那么两个操作数都将转换为数字进行比较,0和-0相等,Infinity比任何数字都要大,-Infinity比任何数字都要小,如果其中一个操作数是 NaN,那么比较操作符总是返回
false
。
注:字符串比较区分大小写,所有大写字母都小于小写字母。关于字符串比较还可以通过
String.localCompare()
进行,如'a'.localCompare('b');
返回-1
。
通过上面的类型转换规则可以看出,在进行数字和字符串操作的时候,与「+」运算符不同,「+」运算符更偏爱字符串,而比较运算符更偏爱数字。
in 运算符
in 运算符通常用于判断属性或元素是否存在与对象/数组中,它的左操作数是一个字符串或者可以转换为字符串,右操作数是一个对象:
instanceof 运算符
instanceof 用于判断对象是否某个类(含父类)的实例,它的左操作数是一个对象,右操作数是标识对象的类:
注:所有对象都是 Object 类的实例。
No Comments