比较运算符(>, >=, <, <= )
运算符两边操作数都是数字,则进行数字比较; 运算符两边操作数都是字符串,则将字符的ASCII码进行一一比较(数字<小写字母<大写字母<中文); 运算符一边操作数是数字,一边是字符串,则将字符串强制转换成number,再进行比较(因为字符串和数字都是值类型,应该是强制调用Number方法将字符串转换成数字,一般字符串转换成number类型得到的都是NaN,而NaN与其他所有操作数相比较得到的结果都是false); 运算符有一边操作数是布尔类型,则先将bool值转换成数字,然后再进行比较; 运算符有一边操作数是对象,则进行强制类型转换成数字,得到的结果是NaN,与另一个操作数比较得到的结果肯定是false。
加法运算符(+)
运算符两边操作数都是数字,则进行数字相加; 运算符两边操作数都是字符串,则进行字符串连接; 运算符一边操作数是数字/null/undefined,一边是字符串,则先将数字/null/undefined转换成字符串,再与另一边的字符串进行连接(注意这里的null和undefined没有对应的toString方法,因此这里将这两种类型的数据强制转化成string类型调用的可能是String这类的方法);
var a = 1;
var s = 'str';
var n = null;
var u = undefined;
var sa = s + a //"str1"
var sn = s + n //"strnull"
var su = s + u //"strundefined"
运算符一边是对象,则会调用其对应的toString 方法,将其转化成“[object Object]”,然后再和另一个操作数进行连接(另一个操作数也会进行相应的转换成string类型);
var obj = {name: 'zyp'};
var a = 1;
var s = 'str'
var u = undefined
var obja = obj + a //"[object Object]1"
var objs = obj + s //"[object Object]1"
var obju = obj + u//"[object Object]undefined"
运算符有一边操作数是symbol类型,进行加法运算的时候会报错。