运算符
算术运算符
加法运算符(Addition):x + y
减法运算符(Subtraction): x - y
乘法运算符(Multiplication): x * y
除法运算符(Division):x / y
余数运算符(Remainder):x % y
自增运算符(Increment):++x 或者 x++
自减运算符(Decrement):--x 或者 x--
求负运算符(Negate):-x
数值运算符(Convert to number): +x
自增运算符 ++X 和 X++ 这两种方式在不赋值的情况下运算结果是一样的。
在赋值的的情况下
1. Y = ++X X先自增 然后再赋值给Y
比如X 的值是4,这时候经过运算之后,X=5,Y=5
2. Y = X ++ X先赋值 然后再自己自增 X=5,Y=4
加法运算符 +
在两个操作数都是数字的时候,会做加法运算
两个参数都是字符串或在有一个参数是字符串的情况下会把另外一个参数转换为字符串做字符串拼接
在参数有对象的情况下会调用其valueOf或toString
在只有一个字符串参数的时候会尝试将其转换为数字
在只有一个数字参数的时候返回其正数值
console.log(2+4);//6
console.log("2"+"4");//"24"
console.log(2+"4");//"24"
console.log(2+new Date());//"2Mon Jan 20 2014 17:15:01 GMT+0800 (China Standard Time)"
console.log(+"4");//4
赋值运算符
x += y // 等同于 x = x + y
x -= y // 等同于 x = x - y
x *= y // 等同于 x = x * y
x /= y // 等同于 x = x / y
x %= y // 等同于 x = x % y
x >>= y // 等同于 x = x >> y
x <<= y // 等同于 x = x << y
x >>>= y // 等同于 x = x >>> y
x &= y // 等同于 x = x & y
x |= y // 等同于 x = x | y
x ^= y // 等同于 x = x ^ y
比较运算符
1.== 相等
2.===严格相等
3.!=不相等
4.!==严格不相等
5.<小于
6.<=小于或等于
7.>大于
8.>=大于或等于
布尔运算符
! 取反运算符
&& 且运算符
|| 或运算符
condition? true case : false case三元条件运算符
位运算
或运算(or):符号为|,表示两个二进制位中有一个为1,则结果为1,否则为0。
与运算(and):符号为&,表示两个二进制位都为1,则结果为1,否则为0。
否运算(not):符号为~,表示将一个二进制位变成相反值。
异或运算(xor):符号为ˆ,表示两个二进制位中有且仅有一个为1时,结果为1,否则为0。
左移运算(left shift):符号为<<
右移运算(right shift):符号为>>
带符号位的右移运算(zero filled right shift):符号为>>>
void
void运算符的作用是执行一个表达式,然后返回undefined。
typeof
typeof运算符可以返回一个值的数据类型,可能有以下结果:
数值、字符串、布尔值分别返回number、string、boolean
function 、undefined 分别返回 function undefined
typeof 123; // "number"
typeof "123"; // "string"
typeof false; // "boolean"
function f(){}
typeof f; // "function"
typeof undefined; // "undefined"
其他的返回都是object
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
相等
我们知道可以使用==或===判断两个值的相等性,其中区别相信大家清楚,===是严格意义的相等,只需注意NaN和NaN不等就行了。而使用==的时候,javascript会帮我们做类型转换,造成一些匪夷所思的结果,那么使用==的时候会在哪些情况下做类型转换,又会换成什么样子?
如果两个值类型相同,则执行严格相等的运算
如果两个值的类型不同
如果一个是null,一个是undefined,那么相等
如果一个是数字,一个是字符串,先将字符串转为数字,然后比较
如果一个值是true/false则将其转为1/0比较
如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较
其它就不相等了
null==undefined;
NaN==NaN
"1"==true