+
- 两个操作数都是数值,就是数值操作
- 有一个操作数是字符串,就执行字符串拼接
- 其他情况都先执行String()方法进行类型转换成String类型,然后进行字符串拼接
(注意:这里有个有趣的地方 console.log({} + [])打印 0, console.log([] + {})打印'[object Object]' 这里第一种是为什么呢, 因为js解析引擎会将{} 开头作为一个模块解析,其实就是什么也没有只执行了 + []的操作)
>、<、>=、<=
- 除了两个操作数都是字符串的情况,其他都转换成Number类型比较大小
- 任何操作数与NaN进行比较,结果都是false
- 对于两个操作数都是字符串,比较的是字符串的字符编码
==、!=
- 强制类型转换,一般都是转换为数值
- 这里判断的相等只能说明值相等(对于基本类型)或引用相等(对于引用类型),并不能说明类型也一致。
- NaN和任何值都不相等
- 对象相等是指向同一对象才相等
- undefined == null 返回true,因为ECMA262规定的
- 如果 x 或 y 中有一个为 NaN,则返回 false;
- 如果 x 与 y 皆为 null 或 undefined 中的一种类型,则返回 true(null == undefined // true);否则返回 false(null == 0 // false);
- 如果 x,y 类型不一致,且 x,y 为 String、Number、Boolean 中的某一类型,则将 x,y 使用 toNumber 函数转化为 Number 类型再进行比较;
- 如果 x,y 中有一个为 Object,则首先使用 ToPrimitive 函数将其转化为原始类型,再进行比较。
if语句、条件操作符 、! 、while语句
- 这种针对Boolean类型的,因此对其他类型应用这些操作符时,自动执行Boolean()函数
如果有什么错误或者不准确的地方欢迎指正。