JS运算符
所有语言的运算符大同小异,这里只说不同点。
一.算术运算符
与字符串做加法,非字符串会转换为字符串,然后进行拼串操作。
如果运算时不存在字符串,则转换为Number进行运算。
任何值与NaN做算术运算结果都为NaN。
+(正号)对于非数字,先转换为数字。
二.逻辑运算符
JS的逻辑运算符运算时,遵循短路运算。
JS的逻辑表达式运算后的结果:
运算时,转换为布尔值,运算结果为直到可以确定逻辑表达式真假的时候的值。
举个例子:
var a = 1 && 2;
console.log(a);
结果a的值为2,运算时,1被转换为布尔值true,进行与运算,当前条件还不足以确定该逻辑表达式的值,因此会继续运算。
var a = 0 && 1;
console.log(a);
这次,a的值为0,0被转换为布尔值false,进行与运算,现在就可以确定逻辑表达式为假,所以逻辑表达式的值就为当前的0。
三.关系运算符
- 如果关系运算符两边的值都是字符串,则依次比较每一个字符的Unicode编码。(类似于C中的strcmp()函数)
- 如果关系运算符两边不全为字符串,基本类型转换为字符串,对象则使用它的引用(地址)作比较。说白了,比较栈内存的东西
- 任何值于NaN做关系运算都为false,NaN == NaN也是false。
- null == undefined的值为true
引入两个新的关系运算符:=== 与 !==
比较时,首先会比较两边值的类型,如果类型相同才会比较值,也就是说,值的类型也参与比较。