javascript基础课程之运算符定义用法详解
需要注意的是大多运算符都是标点符号来表示的,比如delete和instanceof.无论是关键字运算符还是符号运算符,所表示的运算符一样都是正规运算符,他们的语法都非常言简意赅。
下标运算符的优先级来排序的,前边的运算符优先级高于后边的运算符优先级。被水平华丰隔开的运算符具有不同的优先级。
A表示运算符的结合性。
L从左至右或者R(从右至左)
标题N的列表表示操作数的个数。
类型表示期望的操作数的类型,以及运算符的结果类型(在"→"符号之后)
i.操作数的个数
运算符可以通过操作数的个数进行分类。
javascript中的大多数运算符是二元运算符,将两个表达式合并成一个稍微复杂的表达式。
javascript也支持一些一元运算符,它们将一个表达式转换为另一个稍微复杂的表达式。表达式-x中的"-"运算符就是一个一元运算符。是将x求负值。
javascript支持一个三元运算符:条件判断运算符“?:”,它将三个表达式合并为一个表达式
ii.操作数类型和结果类型
一些运算符可以用于任何数据类型,但仍然希望它们操作指定的类型的数据。
iii.左值
在表中的赋值运算符和其它少数运算符期望它们的操作数lval类型,左值是一个古老的术语。它是指“表达式只能出现在赋值运算符的左侧”。javascript中,变量、对象属性和数组元素均是左值。ECMAScript规范允许范围内置函数返回一个左值,但定义的函数则不能返回左值。
iiii.运算符的优先级
在上表中,所示的运算符是按照优先级从高到低排序的,每个水平分隔线内一组运算符有相同的优先级。运算符优先级优先控制着运算符的执行顺序。运算符高的(表顶)的执行总是高于优先级低的(表格的底部)运算符。
看如下表达式
w=x+y*z;
乘法运算符“*”比加法“+”具有更高的优先级,所以乘法先执行。然后,由于赋值运算符“=”具有最低优先级。因此赋值操作是在右侧的表达式计算出结果后进行的。
运算符的优先级可以使用园括号来从写。以上表达式可以这样写。
w = (x + y) * z;
需要注意的是,属性访问表达式和调用表达式的优先级要比表中的所有运算符都要高。
typeof my.Function[x](y)
尽管typeof是优先级最高的运算符之一,但typeof也是在两次属性访问和函数调用后执行的。
事实上,如果你真的不确定你所使用的运算符优先级,最简单的方法就是使用园括号来强行指定运算次序。有些重要的规则则要熟记:乘法和除法高于加减法,赋值运算的优先级非常低,通常是最后执行的。
iiiiii.运算符的结合性
在本节表中,标题为A的列说明了运算符的结核性。L指从左至右结合,R指从右至左结合。结核性指定了在多个具有同样优先级的运算符表达式中的运算顺序。
例如,减法运算按照由左到右的执行结合性。
w = x - y - z
和这段代码一样:
w = ((x - y) - z)
反过来讲,下面这个表达式:
x = ~-y; w = x = y = z; q=a?b:c?d:e?f:g;
和这段代码一模一样
x=~(-y); w=(x=(y=z)); q=a?b:(c?d:(e?f:g))
因为一元操作符、赋值和三元条件运算符都具有从右至左的结合性。
iiiiiii.运算顺序
运算符的优先级和结合性规定了它们在赋值的运算式中的运算顺序,但并没有规定字表达式的计算过程中的运算顺序。javascript总是严格按照从左至右的顺序计算表达式,例如:
在表达式 w=x+y*z 中,将首先计算表达式w,然后计算x、y和z,然后,y的值和z相乘,在加上x的值。最后将其表达式w所指代的变量或属性。给表达式添加园括号将会改变乘法,加法和赋值运算的关系。但从左至右的顺序是不会改变的。
以上就是javascript基础课程之运算符定义用法详解的详细内容,更多请关注其它相关文章!