比较运算符
小于(<) 、大于(>) 、小于等于(<=)和大于等于(>=)这几个关系操作符用于对两个值进行比较,这几个操作符都是返回一个布尔值。
当关系操作符的操作数使用了非数值时,按照相应的规则比较。
1)如果两个操作数都是数值,则执行数值比较;
2)如果两个操作数都是字符串,则按位比较两个字符串对应的字符ASCII编码值;(a:97,A:65)
3)如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较;
4)任何操作数与 NaN 进行关系比较,结果都是 false;
5)如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。
6)如果一个操作数是对象,则调用这个对象的 valueOf()方法,用得到的结果按照前面的规则执行比较。如果对象valueOf()方法不能比较,则调用 toString()方法,并用得到的结果根据前面的规则执行比较;
相等运算符
确定两个变量是否相等,js提供两组操作符,这几个操作符也都是返回一个布尔值。
1)相等(==)如果两个操作数相等,则返回true和不相等(!=)如果两个操作数不相等,则返回true。——先转换成相似类型再比较。双等号(==) 只进行值的比较, 不比较类型, 值相同就可以, 类型可以不一样。
2)全等(===)如果两个操作数相等,则返回true和不全等(!==)如果两个操作数不相等,则返回true——仅比较而不转换。三等号(===)会对值和类型同时比较, 只有同时相同才是真的相同。
相等和全等的区别:
相等 ==: 先转换类型再比较 全等 ===:直接比较,不转换类型,只要是类型不同就不相等,类型相同的看值是否相等
不相等和不全等同理,就是相等和全等的取反。
比较规则: 1.基本数据和引用数据比较:将引用数据转换为字符串进行比较,引用数据的值和基本数据比较;
2.基本数据和基本数据比较:比较值和类型;
null 和 undefined 是相等的,但null === undefined 会返回 false,因为它们是不同类型的值;
相等==:要比较相等之前,不能将 null 和 undefined 转换成其他任何值(null == 0为false,undefined==0为false);
相等==:如果有一个操作数是 NaN,则相等操作符返回 false,而不相等操作符返回 true;即使两个操作数都是 NaN,相等操作符也返回 false,NaN 不等于 NaN。
全等===:(1)如果类型不同,就一定不相等;(2)如果两个都是数值,并且是同一个值,那么相等,如果其中一个是NaN,那么不相等;(3)如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。(4)如果两个值都是true,或是false,那么相等;(5)如果两个值都引用同一个引用数据(对象或是函数等),那么相等,否则不相等(6)如果两个值都是null,或是undefined,那么相等。
3.引用数据和引用数据比较:比较内存空间是否相同。
引用数据和基本数据(==)比较图表:有颜色表示相等(==)返回true,没有颜色表示不相等(==)返回false
in运算符
检查右侧对象里面是否拥有左侧成员名,也是返回一个布尔值。如果有返回true;反之,返回false。
instanceof运算符
检查左侧的对象是否是右侧类的实例,也是返回一个布尔值。如果是返回true;反之,返回false。
如果一个对象是一个“父类”的子类的实例,则一样返回true,所有的对象都是Object的子类。