javascript运算符语法概述
2017-06-06 10:16
253 查看
操作数个数
javascript的运算符总共有46个,如果根据其操作数的个数进行分类,则大多数是二元运算符(binary operator),它们的操作数都是两个,它们将两个表达式合并成复杂表达式1 + 2;true || false;javascript中的一元运算符(unary operator)将一个表达式转换为另一个稍复杂的表达式,主要包括以下9个:
++ -- - + ~ ! delete typeof void
a++;typeof true;javascript只有一个三元运算符(ternary operator),是条件判断运算符?:,它将三个表达式合并成一个表达式
2>1 ? 2 : 1;
优先级
运算符优先级控制着运算符的执行顺序,优先级高的运算符的执行总是先于优先级运算符低的运算符 46个运算符总共分为14级的优先级,从高到低依次是:1 ++ -- - + ~ ! delete typeof void2 * / % 3 + - 4 << >> >>> 5 < <= > >= instanceof in6 == != === !== 7 & 8 ^ 9 | 10 && 11 || 12 ?:13 = *= /= %= += -= &= ^= |= <<= >>= >>>= 14 ,
由这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);//2 3
//类似地a = 1; b = a-- * a++ + a++; console.log(a,b);//2,1
类型
一些运算符可以作用于任何数据类型,但仍然希望它们的操作数是指定类型的数据,并且大多数运算符返回一个特定类型的值,在下面的运算符规则表中,箭头前为运算符操作数的类型,箭头后为运算结果的类型【左值】 左值(lvalue)是一个古老的术语,指表达式只能出现在运算符的左侧 在javascript中,变量、对象属性和数组元素都是左值 递增运算符++、递减运算符--和赋值运算符的操作数类型是左值var a = 3; a++;//33--;//报错({}).a += '1';//'undefined1''test' -= 'test';//报错
运算符规则表
++ 增量 lval->-- 减量 lval->- 求反 num->+ 转换为数字 num->~ 按位求反 ->! 逻辑非 bool-> 删除属性 lval-> 检测类型 any-> 返回undefined any->****************************************************** * \ % 乘、除、求余 num,num->****************************************************** + - 加、减 num,num->+ 字符串连接 str,str->****************************************************** << 左移位 ,->>> 有符号右移位 ,->>>> 无符号右移位 ,->****************************************************** < <= > >= 比较数字顺序 num,num->< <= > >= 比较字母表顺序 str,str-> 测试对象类 obj,func-> 测试属性 str,obj->****************************************************** == 判断相等 any,any->!= 判断不等 any,any->=== 判断恒等 any,any->!== 判断非恒等 any,any->****************************************************** & 按位与 ,->****************************************************** ^ 按位异或 ,->****************************************************** | 按位或 ,->****************************************************** && 逻辑与 any,any->****************************************************** || 逻辑或 any,any->****************************************************** ?: 条件运算符 bool,any,any->****************************************************** = 赋值 lval,any->*= /= %= += -= &= 运算且赋值 lval,any->^= |= <<= >>= >>>= ******************************************************->
相关文章推荐
- JavaScript---基本语法学习(一)JavaScript概述、Java和JavaScript的区别、和HTML结合方式、数据类型、运算符和表达式
- javascript运算符语法概述
- javascript运算符语法全面概述
- javascript中的void运算符语法及使用介绍
- Java菜鸟学习笔记--语法篇(三):运算符概述
- JavaScript学习(4.4):运算符概述
- JavaScript的语法变量运算符
- JavaScript——1(基本语法,类型,变量与运算符,控制流程,函数)
- JavaScript系统学习之一 <基本语法,运算符,流程控制语句>
- JavaScript核心语法————数据类型转化、运算符、表达式
- Javascript(一)-06-(JS语法-其他运算符)
- JavaScript语法概述
- 16-JavaScript-基本语法-运算符-算术-关系-逻辑
- javascript基础语法-运算符
- JavaScript基础(语法类型转换、运算符、语句)
- JavaScript之 ------ 基本运用语法(变量、运算符、语句)
- javascript中的void运算符语法及使用介绍
- JavaScript语法详解(五)____运算符
- JavaScript基础(语法类型转换、运算符、语句)
- JavaScript之基础-1 JavaScript (概述、基础语法