运算符与操作数的组合就是表达式
运算符分为:算术运算符,比较运算符,逻辑运算符,赋值运算符,一元运算符,三元运算符以及特殊运算符
1.算术运算符
+ — * / % ++ -- //都可进行数值的运算,隐式调用Number,转化为数值进行计算,不能转换返回NaN
1)+ :加号的二义性
a.数值的运算
b.字符串的连接
任何的数据类型和字符串相加表示连接
var name="张三"; var age=12; var str= "我的名字叫"+name+",我的年龄是"+age+"岁"; console.log(str) //我的名字叫张三,我的年龄是12岁 //在EC6中新添加的一种表示连接的方式,` ${变量名} ` var str1=`我的名字叫${name},我的年龄是${age}岁` console.log(str1) //我的名字叫张三,我的年龄是12岁 //效果是一样的
2)++:进行自增,相当于+1
a++:先运行再自增
++a:先自增再运行
先看一个例子
var d=1; // 1 console.log(d++); // 1 d先输出1后自增为2 d++; // 3 console.log(d); // 3
在控制台输出之后,变量b进行了自增
结合变量的赋值,再来看一个例子
var num=1; var num1=num++; console.log(num); //2 console.log(num1); //1 num先赋值给num1为1再自增 var nub=1; var nub1=++nub; console.log(nub); //2 console.log(nub1) //2
2.比较运算符
> < >= <= == === != !==
1)比较运算符运算的结果都是布尔值(true false)
2)== :比较两个数的值是否相等,进行隐式的数据类型转换
3)=== :不仅比较值,还要比较两个数据的类型是否相等
//都是number数据类型时,正常比较 console.log(1>2); //true //一个是字符串,一个是数值,将字符串转换为数值进行比较,不能转换为数值类型直接返回false console.log("1"<2); //true //两个字符串之间进行比较,则把第一个值转化为ASII码进行比较 console.log("ab"<"b"); //true console.log("a"<"b"); //true //如果一个数值与布尔值进行比较,会把布尔值转化为数值进行比较,true为1,false为0 console.log(0<true); //true //== 比较值的大小是否相同 console.log(1=="1"); //true console.log(""==0); //true console.log(" "==0); //true
console.log(undefined==null)//true
//===要求数值、类型都相等 console.log(1==="1"); //false
3.赋值运算符
= += -= *= /= %=
+=:var a=1; a+=2相当于a=a+2,其它类似
var a=1; a+=2; //a=3 console.log(a); //3 a*=3; console.log(a); //9 console.log(a++); //9 a=10,但输出值为9 console.log(++a); //11 a=11 a%=2; console.log(a); //2
同时要注意+的二义性
var num="3"; num+=4; console.log(num) //34 +表示连接
4.逻辑运算符
&& || ! //与、或、非
&&:运算符两边有假为假,全真为真 ||:运算符两边有真为真,全假为假 ! :取反,真为假,假为真
1)逻辑运算符可以对任意类型的数据进行运算,但在运算的过程中会转变为对应的boolean类型值,除了null 、undefined、0、空字符串、false、NaN是false,其余的数值类型都转化为false
2)&& 、|| 隐式调用boolean类型值进行运算,在能判断真假的时候停止,但表达式最后的值不会转化为boolean类型值,返回值是停止值
console.log(1||2) //1 console.log(1||0) //1 console.log(0||2) //2 console.log(0||null) //null //"||":有真为真,全假为假,在可以判断的时候停止 console.log(1&&2) //2 console.log(1&&0) //0 console.log(0&&2) //0 console.log(0&&null) //0 //"&&":有假为假,全真为真,在可以判断的时候停止
3)!:非运算结果必定是boolean类型值
console.log(!0) //true console.log(!1) //false
5.一元运算符:操作一个数据的运算符
typeof ! +(正) -(负) ++ -- delete new
1)typeof:检测数据类型,返回的结果有:numberstringundefinedobjectooleanfunction
console.log(typeof("12")); //string console.log(typeof(12)); //number console.log(typeof(function () { })); //function function object(){} var obj=new object() console.log(obj) //object
console.log(typeof(undefined)) //undefined console.log(typeof(null)); //object *null是个空对象 console.log(typeof(false));//boolean //typeof的检测结果是字符串类型 var aa=typeof ("") console.log(typeof(aa)); //string
2)delete:删除对象的属性或方法
var obj={name:"zhangsan",sex:"man"}; delete obj.sex; console.log(obj.sex) //undefined ps(null删除对象) obj=null; console.log(obj) //null
3)new:用来创建一个对象
5.三元运算符
根据表达式的计算结果有条件的为变量赋值
格式:var 变量=boolean expression ? 条件为真的值:条件为假的值
var num=1>2? 3:4; console.log(num) //4
6.特殊运算符
, :逗号 1)一次声明多个变量 2)函数传多个参数用逗号隔开 3)多个键值对之间用逗号隔开。。。
():括号 1)运算的时候有优先级的作用 2)函数的调用 3)正则形成原子分子
ps:运算符运算过程中有些会涉及到隐式调用,隐式 调用主要包括:
1)算术运算符调用Number类型,如果能转换为数值进行运算,不能就返回NaN
2)比较运算符调用Number
3)逻辑运算符调用boolearn类型值,但&& || 返回的值不是boolearn类型值
4)三元运算符调用boolearn类型值
另外,if语句判定条件也会隐式调用boolearn类型值,条件为真执行