3、javaScript中的运算符
操作数和运算符组成了一个完整的表达式,在JavaScript中的运算符可以分为以下几类
1、算数运算符
2、赋值运算符
3、关系运算符
4、逻辑运算符
5、位运算符
6、特殊运算符
3.1算术运算符
1、'+'是JavaScript中的加法运算符,数字和字符串都能进行相加操作
var sum=5+5;
console.log(sum); //打印结果是10
var newString="Hello"+" World";
console.log(newString);//打印结果是Hello World
特别值得注意的是特殊数值NaN和Infinity如果出现在运算中,和我们在数学中的计算结果是一样的
(1)如果操作数中有一个是NaN,那么结果就是NaN;
(2)正无穷+正无穷=正无穷;
(3)负无穷+负无穷=负无穷;
(4)正无穷+负无穷=NaN;
(5)字符串和数值相加,数值会被强制转化成为字符串
var sum=5+NaN; console.log(sum)//打印结果是NaN
var sum=Infinity+Infinity; console.log(sum)//打印结果是Infinity
var sum=-Infinity+-Infinity; console.log(sum)//打印结果是-Infinity
var sum=Infinity+-Infinity; console.log(sum)//打印结果是NaN
2、'-'是JavaScript中减法运算符
(1)字符串相减为NaN
(2)字符串和数值相减会先将字符串转为数值,转化成功就能计算,像“10”这个字符串可以转化为数值10,而“hello”转化不了数值,和数值相减的结果就是NaN
特别值得注意的是特殊数值NaN和Infinity如果出现在运算中,和我们在数学中的计算结果是一样的
(1)如果操作数中有一个是NaN,那么结果就是NaN;
(2)正无穷-正无穷=NaN;
(3)负无穷-负无穷=NaN;
(4)正无穷-负无穷=正无穷;
(5)负无穷-正无穷=负无穷;
特别注意:正负运算符还有一个很实际的作用是将可以转化为数值的字符串转化为数字
console.log(+"10")//打印结果是10
console.log(-"10")//打印结果是-10
3、'*'是JavaScript中乘法运算符(字符串无法相乘)
特别值得注意的是特殊数值NaN和Infinity如果出现在运算中,和我们在数学中的计算结果是一样的
(1)如果某个操作数是NaN,则结果是NaN
(2)无穷值*0=NaN
(3)无穷值*数值(+/-)=(+/-)Infinity
(4)(+/-)无穷*(+/-)无穷=(+/-)无穷
console.log(1*NaN); //NaN
console.log(Infinity*0);//NaN
console.log(Infinity*1);//Infinity
console.log(Infinity*-1);//-Infinity
console.log(Infinity*Infinity);//Infinity
console.log(-Infinity*-Infinity); //Infinity
console.log(Infinity*-Infinity); //-Infinity
4、'/'是JavaScript中的除法运算符
特别值得注意的是特殊数值NaN和Infinity如果出现在运算中,和我们在数学中的计算结果是一样的
(1)如果某个操作数是NaN,则结果是NaN
(2)无穷值/无穷值=NaN
(3)(+/-)无穷值/(+/-)任何数=(+/-)无穷值
(4)任何数/无穷值=0
(5)(+/-)任何数/0=(+/-)无穷值
(6)0/任何数=0
5、'%'是JavaScript中的取模(求余)运算符(对浮点数也能求余,没有太严格的规定)
(1)无穷值%任何数=NaN;
(2)非无穷值%无穷值=非无穷值本身
(3)任何数%0=NaN
3.2赋值运算符
赋值运算符没有什么好说的
复合运算符实际上是将变量作为第一个操作数经过计算后再赋值给它本身(比如v1+=10:v1=v1+10)
3.3关系运算符
1、字符串和字符串之间的比较:逐字符进行字符码之间的大小比较,如果相等,则比较下一个字符直到所有字符都比较完
值得注意的是:数字类型的字符串也符合上面的要求,比如"12">"3",返回的是false,因为先比较的是字符‘1’和‘3’
2、数字和字符串之间的比较:
(数字的字符串和数字比较):先将字符串强制转化为数字再进行比较
(非数字的字符串和数字比较):永远都是false
console.log("12">11)// true
console.log("12">14)//false
console.log("a">11) //永远为false
console.log("a"<=11)//永远为false
3、等于和不等于的比较遵从下面的原则:(==和!=只有值的比较,===和!==包括值和类型的同时比较)
(1)布尔值true和false在比较之前都会转化为数值,true转化为1,false转化为0(全等比较除外,全等比较不做类型转化)
console.log(true==1)//true
console.log(true===1)//false
(2)数字类的字符串会在比较时转化为数字
console.log("1"==1)//true
console.log("1"===1)/false
(3)null和undefined的值比较
console.log(null==undefined)// true
console.log(null===undefined) //false
(4)NaN和NaN不相等
console.log(NaN==NaN)//false
console.log(NaN===NaN)//false
console.log(NaN!=NaN)//true
console.log(NaN!==NaN)//true
3.4 逻辑运算符
1、&&(逻辑与):同为true则为true
(1)两个对象进行逻辑与运算,将返回第二个对象
(2)如果有一个操作数为null,结果为null;
(3)如果有一个操作数为NaN,结果为NaN;
(4)如果有一个操作数为undefined,结果为undefined;
(5)null,undefined,NaN之间比较,结果是&&前面的操作数
console.log(true&&null)//null
console.log(true&&undefined)//undefined
console.log(true&&NaN)//NaN
console.log(null&&NaN)//null
值得注意的是:如果第一个操作数已经能确定结果,则后面的操作数不会执行
var v1=10;
var v2=10;
var v3=true;
var v4=false;
console.log(v3&&(v1++))//true
console.log(v4&&(v2++))//false(当v4为false已经可以确定结果,后面的就不执行了)
console.log(v1)//11
console.log(v2)//10
2、||(或运算):同为false则为false
(1)如果第一个操作数为true或者为对象,则结果是true或者对象;
(2)如果第一个操作数为false,第二个操作数为对象,则结果为对象;
3、!(取法运算):结果一定是布尔值
(1)操作数为对象,返回false;
(2)操作数是0,0看做false,返回true;
(3)操作数是非0数字,返回false;
(4)操作数为null、NaN和undefined,返回true
3.5 位运算符
小编真心不想研究这个东西,大家有兴趣的去看看书
3.6特殊运算符
1、后置自增自减运算符:返回的是运算前的值
var a=10,b=10;
console.log(a++);//10
console.log(a)//11
console.log(b--)//10
console.log(b)//9
2、前置自增自减运算符:返回的是运算后的值
var a=10,b=10;
console.log(++a)//11
console.log(a)//11
console.log(--b)//9
console.log(b)//9
3、条件运算符:逻辑值?表达式1:表达式2(用来代替if-else最简便的方法)
var num1=true?10:9;
console.log(num1);//逻辑值为true,取表达式1,num1为10
var num2=false?10:9;
console.log(num2)//逻辑值为false,取表达式2,num2为9
4、delete运算符:用于将对象中的某个属性删除
var obj={
name:"taopoppy",
age:23,
}
console.log(obj.name)//taopoppy
delete obj.name;//删除name属性
console.log(obj.name)//undefined
注意最后一条不是null,而是undefined,对象的属性属于原始类型,不是对象类型,name属性被delete后就不存在,打印一个不存在的属性(即无中生有的属性)就是undefined,具体可以回到上篇博客再看看https://blog.csdn.net/weixin_37968345/article/details/80577367
3.6.1运算符的优先级
关于运算符的优先级,同学们可以上这个网站https://technet.microsoft.com/zh-cn/library/z3ks45k7去查阅