运算符

一元算术运算符
算术运算符还有个可以操作与单独的操作数,并产生一个新值,这就是一元运算符。常见有++(递增) 、--(递减)、+(加)、(-)减法,其中加+和-既是一元运算符又是二元运算符。+可以对操作数转换为数字,并返回这个数字,-可以对操作数转换为数字,并返回这个数字的同时改变运算结果的符号。

一元加法对数字无作用,但对字符串却有有趣的效果,会把字符串转换成数字。

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。