运算符
算数运算符
+ - * / %
- 字符串相加,首尾相连
如果+运算符一端是字符串,另一端不管是任何类型都会隐式转换为字符串
隐式转换:自动默认转换,将目标类型的构造函数强制转换为
console.log(“abc”+“def”) // abcdef
console.log(“abc”+“5) // abc5
// abc5
console.log(“abc”+true) // abctrue
console.log(“abc”+null) // abcnull
console.log(“abc”+{a:1}) //abc[object Object]
consloe.log(5+“”) //加一个空的字符串,就转换为字符串
- 数值+布尔值
隐式相加
console.log(1+true) //2
comsole.log(1+false) //1
//数值+Undefined会隐式转化为数值相加 NaN
console.log(1+undefined) //NaN
//null 隐士转换为0
console.log(1+null) //0
数值除了字符串外的非数值相加都会隐式转为数值相加
-、*、/ 都会依照数值运算先将所有其他类型转换为数值后在运算
赋值运算符
a+=2 //先运算等号右边的内容,将运算的结果赋值给等号左侧
吧、 //加一个空的字符串,就转换为字符串
a+2 步长 累加
将运算结果赋值回原来的变量覆盖原值
一元运算符
a++; //会隐式转换为数值再进行+1
a+=1 ; //参照算数运算符
后置递增
var b=a++; //b=1 a=2
先递增后返回原值
前置等曾
var b=++a //b=2 a=2
先返回原值再进行递增
关系运算符
- < <= > >= 返回布尔值
- == =! 会自动隐式转换为两端类型相同后比较
- === ===!不转换类型,除了比较直以外还会比较类型
- 0 false “”相等
- null undefined 相等 空或者未赋值
- NaN==NaN 不等
var a="4a" ;
Number.isNaN(a);
//都是判断数值类型,非数值类型不隐式转换返回false,数值类型进行判断;
isNaN(a);
//先隐式转换为数值,然后在判断是否是非数值
if 条件语句,如果返回的不是布尔值时会自动隐式转换为布尔值
if(a){
}
- !a:取反,取布尔值的反,如果是布尔值就会变成相反的结果。
- 如果值不是布尔值就会隐式转话为布尔值再取反。
console.log([ ] =[ ]) //false
//因为数组是对象类型,也就是引用类型,两个新的数组就是两个不同的对象,所以不想等
console.log([ ] != [ ]) //true
//[ ] 空数组转换为字符串" " ;
// " ”== false ;
逻辑运算符
|| 或
- true || true 返回第一个true
- true || false 返回隐式转换为布尔值为true的值
- false || true 返回隐式转换为布尔值为true的值
- false || false 返回最后一个false的值
&& 且
- true && true 返回第二个true的结果
- true && false 返回false的结果
- false && true 返回false的结果
- false && false 返回第一个false的结果
图像 像素点 每个像素点是一个纯色彩
一英寸 72像素点
位运算符
- 位非运算符 ~
var a=4 ;
加1取负
console.log(~a); //-5
双位非,取整,任何内容转换为数值,如果是非数值变为0,其他为数值
console.log(~~a) // 4
- & 运算 于运算
console.log(35 && 42) //结果为12
011110
101101
001100
//两个全为1就为1,有0就为0;
- | 运算 或运算
011110
101101
111111
//有1就为1
- ^异或运算
011110
101101
110011
//两个都是相同时则为0,不同时则为1
- <<左移位运算符
console.log(8<<2); //结果为32
100000
左移动两位
console.log(1<<n)
像左移动n位就是2的n次幂
- 右移位运算符
console.log(8>>2) ; //结果为2
10
向右移动两位
三目运算符
? :
var a=5 ;
var b=a>3 ? 1 : 0 ;
//如果a>3时,返回1赋值给b