javascript运算符语法全面概述


Posted in Javascript onJuly 14, 2016

前面的话

javascript中的运算符大多由标点符号表示,少数由关键字表示,它们的语法言简意赅,它们的数量却着实不少。运算符始终都遵循着一些固定语法,只有了解并掌握这些内容,才能正确使用运算符。本文将主要介绍javascript运算符的语法概述

操作数个数  

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级的优先级,从高到低依次是:

++ -- - + ~ ! delete typeof void
 * / %
 + -
 << >> >>>
 < <= > >= instanceof in
 == != === !==
 &
 ^
 |
&&
||
?:
= *= /= %= += -= &= ^= |= <<= >>= >>>=
,

由这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++;//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       返回undefined     any->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运算符语法全面概述就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript按位非运算符的使用方法
Nov 14 Javascript
DOM基础教程之使用DOM
Jan 19 Javascript
jquery实现对联广告的方法
Feb 05 Javascript
在IE8上JS实现combobox支持拼音检索功能
May 23 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
May 27 Javascript
关于vue.js弹窗组件的知识点总结
Sep 11 Javascript
Bootstrap进度条实现代码解析
Mar 07 Javascript
在使用JSON格式处理数据时应该注意的问题小结
May 20 Javascript
angularjs+bootstrap实现自定义分页的实例代码
Jun 19 Javascript
angularjs实现猜大小功能
Oct 23 Javascript
node.js的http.createServer过程深入解析
Jun 06 Javascript
小程序实现左滑删除效果
Jul 25 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
Jul 14 #Javascript
浅谈addEventListener和attachEvent的区别
Jul 14 #Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
Jul 14 #Javascript
全面了解addEventListener和on的区别
Jul 14 #Javascript
js计算系统当前日期是星期几的方法
Jul 14 #Javascript
原生javascript 学习之js变量全面了解
Jul 14 #Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
Jul 14 #Javascript
You might like
PHP网站基础优化方法小结
2008/09/29 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
javascript下阻止表单重复提交、防刷新、防后退
2007/08/17 Javascript
JS 密码强度验证(兼容IE,火狐,谷歌)
2010/03/15 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
实现动画效果核心方式的js代码
2013/09/27 Javascript
jQuery jcrop插件截图使用方法
2013/11/20 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
深入理解Angular4中的依赖注入
2017/06/07 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
Python记录详细调用堆栈日志的方法
2015/05/05 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
Python 获取windows桌面路径的5种方法小结
2019/07/15 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
2020/06/02 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
eBay加拿大站:eBay.ca
2019/06/20 全球购物
MaBelle玛贝尔香港官网:香港钻饰连锁店
2019/09/09 全球购物
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
老教师工作总结的自我评价
2013/09/27 职场文书
医药学专业大学生职业生涯规划书论文
2014/01/21 职场文书
小区门卫管理制度
2014/01/29 职场文书
酒店副总经理岗位职责范本
2014/02/04 职场文书
节约用水倡议书
2014/04/16 职场文书
《记金华的双龙洞》教学反思
2014/04/19 职场文书
医学检验专业自荐信
2014/09/18 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技
Python字符串的转义字符
2022/04/07 Python