js运算符

运算符

用于连接简单表达式,组成一个复杂的表达式。

‘+’号

  • 两个操作数都是数字,会做加法运算
  • 两个参数都是字符串或有一个参数是字符串,做字符串拼接
  • 在参数有对象的情况下,会调用其valueof或toString
obj={a:1,b:2}
obj+3//'[object object]3',先调用obj.toString()得出[object object]再和3相加
obj={a:1,b:2 valueof:function(){return 100}}//obj+3得出103,调用valueof的方法
  • 在只有一个字符串参数时,会尝试将其装换为数字
+'4'//4
+true//1
+false//1
+'ac'//NaN
+new Date()//1482648206084

除法

x/y

余数

x%y 100/3等于1

a=345,b=22  
parseInt(a/b)//商
a%b//余数

自增

++x或者x++

a=100,b=a++
console.log(a,b)//a=101,b=100先赋值再相加
c=100,d=++c 
console.log(d,c)//d=101,c=101,先加再赋值

求负运算符

-x为求负运算符
+x为数值运算符

赋值运算符

用于给变量赋值,最常见的是等号,x=y就是将y父赋值给x

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

比较运算符

比较两个值,返回一个布尔值,表示是否满足比较条件

==  
===
!=//不相等
!==//严格不相等
<
>
>=

布尔(逻辑)运算符

!//取反
&&//且
||//或
!''//!就是将后面的强调转换布尔值再取反  
!!//就是将后面强制转换为布尔类型 
condition?true case:false case//三元条件运算符

其他

小括号

如果把表达式放在圆括号之中,作用是求值。
如果跟在函数的后面,作用是调用函数

(1+1)//2
function(){}//报错如果(function(){})当做表达式

void

作用是执行一个表达式返回undefined

void(1+2)//undefined
function fn(){
  var undefined=3;
  var a;
  if(a===undefined){
  console.log('===')
}else{
  console.log('!==')
}
}//fn() !==当把undefined赋值了就不能做判断了,方法就是a===voido

逗号运算符

用于对两个表达式求值,并返回后一个表达式的值。

3,4//4
a=(3,4)//4,括号表示求表达式的值
a=3,4//等号的优先级高,a就等于3
var a=1,
     b=2//等同于var a=1;var b=1;

运算符优先级与结合性

  • typeof的优先级相当高
typeof 2*3//(typeof 2)*3等于NaN
  • ++,--是右结合的操作符,比加减乘除的优先级高
4++(不能这样写)
var a=0,b=0
a+++b//0
(a++)+b//0
  • 赋值运算符的优先级相当低
    a=b==c//等同于a=(b==c)
  • 逻辑非!也在优先级队列的前端比加减乘除高,但逻辑与,逻辑或优先级很低,不如加减乘除。
!2*0//0等价于(!2)*0
  • 一个关于逻辑运算符有意思的地方是“短路功能,会结合表达式计算值来考察,了解了逻辑运算父母的“短路特点”,在知道原始表达式的“返回值”就是本身,题目就很简单了。
    “短路”:false&&(anything)计算结果为false;
    true||(anything)计算结果为true;
  • ==与=的区别
    =是右结合;==的优先级高于=;0==false;''==false;
    使用==的时候,js会帮助我们做类型转换,造成一些匪夷所思的结果,那么使用==的时候会在哪些情况下做类型转换又会换成什么样子?
    如果两个值类型相同,则执行严格相等的运算。
    如果两个值的类型不同:
    如果一个是null,一个是undefined,那么相等。
    如果一个是数字,一个是字符串,先将字符串转为数字,然后比较。
    如果一个值是true/false,则将其转换为1/0比较
    如果一个值是对象,一个是数字或字符串,则尝试使用valueof和toString转换后比较。
    其他就不相等了。

你可能感兴趣的:(js运算符)