一元算术运算符
算术运算符还有个可以操作与单独的操作数,并产生一个新值,这就是一元运算符。常见有++(递增) 、--(递减)、+(加)、(-)减法,其中加+和-既是一元运算符又是二元运算符。+可以对操作数转换为数字,并返回这个数字,-可以对操作数转换为数字,并返回这个数字的同时改变运算结果的符号。
一元加法对数字无作用,但对字符串却有有趣的效果,会把字符串转换成数字。
var sNum = "20";
alert(typeof sNum); //输出 "string"
var iNum = +sNum;
alert(typeof iNum); //输出 "number"
这段代码把字符串 "20" 转换成真正的数字。当一元加法运算符对字符串进行操作时,它计算字符串的方式与 parseInt() 相似,主要的不同是只有对以 "0x" 开头的字符串(表示十六进制数字),一元运算符才能把它转换成十进制的值。因此,用一元加法转换 "010",得到的总是 10,而 "0xB" 将被转换成 11。
++
递增运算符的操作数可以在操作符的左侧也可以在右侧。以此根据分别称之为前增量和后增量。
例子:
var i=1;
var j=++i; //先让i加1, 再让j变成i的值2 i=i+1;j=i
console.log(i+" "+j); //2 2
var a=1;
var b=a++; //先让b变成a的值1,再让a加1 b=a;a=a+1
console.log(a+" "+b); //2 1
区别:前增量对操作数进行增量计算,并且返回计算后的值。后增量对操作数进行增量计算,但返回为增量计算的值(就是a)。
递减同理
var x=2;
var y=--x; //y=(--x)
console.log(x+" "+y); //1 1
var c=2;
var d=c--; //(d=c)--
console.log(c+" "+d); //1 2
关系表达式
关系运算符呢用于测试两个值的关系,他们间的关系有相等、小于、属性从属关系等等,关系运算符会根据两个值的关系是否存在而返回true或者false。他们总是会返回一个布尔值
==(相等)和===(全等运算符)运算符用于比较两个值是否相等。他们允许任意类型的操作数,如果操作数相等则返回true,否则返回false.===全等是严格相等的运算符,它操作两个数是否严格相等,当然啦,相等和严格相等也是有个依据的,我们来仔细理解下。首先,我们把=(等于)放进来一起,他们都有区别的
=是赋值(等于),==是相等,===是严格相等(全等);
!=和!==是==和===运算符的求反。
===严格运算符首先会计算操作数的值,然后比较两个值,特别注意的是:全等比较过程中没有任何的类型转换
也就是说类型不同,值相等或者值相等类型不同都是不全等的
console.log(1==="1")//false 类型不同,值相等或者值相等类型不同都是不全等的
console.log(undefined===null) //false
console.log(NaN===NaN)//fasle NaN和任何数字都不全等,即使是它本身
console.log("true"===true)//fasle
console.log(0===-0)//true 如果两个数字,一个为0,一个为-0,那么他们是全等的
//如果两个应用指向同一个对象,那么他们全等,如果指向不懂对象,即使这两个对象具有同样的属性,那么他们也是不全等的。
var a={}
var c=a;
console.log(a===c);//true
var x={"a":1};
var y={"a":1};
console.log(x===y);//fasle
==相等操作符就没有全等严格,如下例子
console.log(1==2);//fasle
console.log(1=="1");//true
console.log(true==1);//true
console.log(0==false);//true
console.log(undefined==null)//true
console.log("true"=="false");//false
比较运算符
比较运算符用来检测两个操作数的大小关系(数组大小或者字母表顺序),也就是说只能对数值和字符串进行操作,如果操作数不是数值或者字符串,那么他们会像转换成数值或者字符串进行比较
字符串是区分大小写的,所有大写字符都小于小写字母。
in运算符
in运算符希望它左边的操作数是一个字符串或者可以转换为字符串,希望他的右侧操作数是一个对象。如果右侧的对象有一个左侧操作数值的属性名,记得是属性名,那么表达式返回true
var obj={
x:1,
y:2
}
console.log("x" in obj)//true
console.log("z" in obj)//false
console.log("toString" in obj)//true
var arr=[1,2,3]
console.log("0" in arr)//true
console.log("1" in arr)//true
console.log("3" in arr)//true
要注意是属性名而不是值。还有就是toString()是所有对象都拥有的方法,因为他是从object继承过来的,以后我们会更加仔细来学习
instanceof运算符
instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上,这样说有点晕,很多刚开始学习的人可能很疑惑,我们先简单说下,js在es6之前是没有真正意义上的类的,什么为类了,我理解是一个抽象的总称,而由这些抽象的类具象出来的就叫做对象。好比如:人类(类)和我(对象),动物(类)和猫(具体的个体,具象化的类,也就是对象)。
instanceof的左操作数就是对象,右操作数就是类了,如果对象是类的实例(具象化的独立个体),则instanceof返回true,否则为false
var obj={};
console.log(obj instanceof Object)//true
var arr=[];
console.log(arr instanceof Array)//true
赋值表达式
js使用=运算符来给标识符(变量或者属性等)赋值。
var a=1;
a=2;
var b=a;
A+=B 等价 A=A+B
换成其他符号也是如此的,还有-=、*=、/=、%=等等。
三元运算符
?: 运算符可以用作 if...else 语句的快捷方式。它通常用作较大表达式(使用 if...else 语句会很繁琐)的一部分。
三元运算,顾名思义会有三个要素,表达式的大致组成为condition ? expr1 : expr2;一个语句加两个表达式。
计算结果是否为true ? true的时候取这个值(如果为true) : false的时候去这个值(如果为false);
var a=1;
var b=(a > 0 ? 3 : 0); //b=3
条件运算符的操作数有三个,其中?前面的会进行布尔运算,如果为ture的话就返回 ?后 :前的那个操作数,这个例子时3,因为a是大于0的,如果前面的操作数返回false,那么结果就是最后一个操作数了。
if/else语句来解释:
var a=1;
var b;
if(a >0 ){
b=3
}else{
b=0
}
var a = 3;
var b = a === 1 ? '是1' : (a === 2 ? '是2' : '不是1也不是2')
console.log(b); //不是1也不是2