javascript运算符语法全面概述
前面的话
javascript中的运算符大多由标点符号表示,少数由关键字表示,它们的语法言简意赅,它们的数量却着实不少。运算符始终都遵循着一些固定语法,只有了解并掌握这些内容,才能正确使用运算符。本文将主要介绍javascript运算符的语法概述
操作数个数
javascript的运算符总共有46个,如果根据其操作数的个数进行分类,则大多数是二元运算符(binaryoperator),它们的操作数都是两个,它们将两个表达式合并成复杂表达式
1+2; true||false;
javascript中的一元运算符(unaryoperator)将一个表达式转换为另一个稍复杂的表达式,主要包括以下9个:
++---+~!deletetypeofvoid a++; typeoftrue;
javascript只有一个三元运算符(ternaryoperator),是条件判断运算符?:,它将三个表达式合并成一个表达式
2>1?2:1;
优先级
运算符优先级控制着运算符的执行顺序,优先级高的运算符的执行总是先于优先级运算符低的运算符
46个运算符总共分为14级的优先级,从高到低依次是:
++---+~!deletetypeofvoid */% +- <<>>>>> <<=>>=instanceofin ==!====!== & ^ | && || ?: =*=/=%=+=-=&=^=|=<<=>>=>>>= ,
由这14级的运算符优先级等级可以看出:
一元运算符 >算术运算符>比较运算符>逻辑运算符>三元运算符>赋值运算符>逗号运算符
[注意]逻辑取反运算符属于一元运算符,其优先级最高
例子
!2<1&&4*3+1;
像上面这种情况就比较复杂,逐步来分解其运算顺序
先计算一元运算符!,!2;//false
//于是表达式变为 false<1&&4*3+1;
计算算术运算符4*3+1;//13
//于是表达式变为 false<1&&13;
计算比较运算符<,false<1;//true
//于是表达式变为: true&&13;//13
可以使用圆括号来强行指定运算次序
2+3*5;//17 (2+3)*5;//25;
结合性
运算符具有两种结合性,一种是从左向右结合,记号为L,一种是从右向左结合,记号为R。结合性指定了在多个具有同样优先级的运算符表达式中的运算顺序
多数运算符都具有从左向右的结合性,只有一元运算符、条件运算符和赋值运算符具有从右向左的结合性
w=x+y+z; //等价于: w=((x+y)+z);
w=x=y=z; //等价于: w=(x=(y=z));
q=a?b:c?d:e?f:g; //等价于: q=a?b:(c?d:(e?f:g));
运算符的优先级和结合性决定了它们在复杂表达式中的运算顺序,但子表达式相互有影响时,顺序会发生变化
例子
a=1; b=a+++a--*a++;
先分析该表达式中,根据优先级的顺序,分别运算递增运算符、乘法运算符、加法运算符和赋值运算符
先计算第一个a++;//结果为1,a为2
//表达式变成 b=1+a--*a++;
计算a--;//结果为2,a为1
//表达式变成 b=1+2*a++;
计算第二个a++;//结果为1,a为2
//表达式变成 b=1+2*1;
所以,最终a=2;b=3;
a=1; b=a+++a--*a++; console.log(a,b);//23
//类似地 a=1; b=a--*a+++a++; console.log(a,b);//2,1
类型
一些运算符可以作用于任何数据类型,但仍然希望它们的操作数是指定类型的数据,并且大多数运算符返回一个特定类型的值,在下面的运算符规则表中,箭头前为运算符操作数的类型,箭头后为运算结果的类型
【左值】
左值(lvalue)是一个古老的术语,指表达式只能出现在运算符的左侧
在javascript中,变量、对象属性和数组元素都是左值
递增运算符++、递减运算符--和赋值运算符的操作数类型是左值
vara=3; a++;//3 3--;//报错 ({}).a+='1';//'undefined1' 'test'-='test';//报错
运算符规则表
运算符操作类型 ++增量lval->num --减量lval->num -求反num->num +转换为数字num->num ~按位求反int->int !逻辑非bool->bool delete删除属性lval->bool typeof检测类型any->str void返回undefinedany->undef ****************************************************** *\%乘、除、求余num,num->num ****************************************************** +-加、减num,num->num +字符串连接str,str->str ****************************************************** <<左移位int,int->int >>有符号右移位int,int->int >>>无符号右移位int,int->int ****************************************************** <<=>>=比较数字顺序num,num->bool <<=>>=比较字母表顺序str,str->bool instanceof测试对象类obj,func->bool in测试属性str,obj->bool ****************************************************** ==判断相等any,any->bool !=判断不等any,any->bool ===判断恒等any,any->bool !==判断非恒等any,any->bool ****************************************************** &按位与int,int->int ****************************************************** ^按位异或int,int->int ****************************************************** |按位或int,int->int ****************************************************** &&逻辑与any,any->any ****************************************************** ||逻辑或any,any->any ****************************************************** ?:条件运算符bool,any,any->any ****************************************************** =赋值lval,any->any *=/=%= +=-=&=运算且赋值lval,any->any ^=|=<<= >>=>>>= ****************************************************** ,忽略第一个操作数,any,any->any 返回第二个操作数
以上这篇javascript运算符语法全面概述就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。