JavaScript中的运算符种类及其规则介绍


Posted in Javascript onSeptember 26, 2013

JavaScript中的运算符有很多,主要分为算术运算符,等同全同运算符,比较运算符,字符串运算符,逻辑运算符,赋值运算符等。这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScript中的运算符。

一、JavaScript运算符的种类

1、算术运算符:+ 、 - 、* 、 / 、 % 、 -(一元取反) 、 ++ 、 --

2、等同全同运算符:== 、 ===、 !== 、 !===

3、比较运算符:< 、 > 、 <= 、 >=

4、字符串运算符:< 、 > 、 <= 、 >= 、 = 、 +

5、逻辑运算符:&& 、 ||、 !、

6、赋值运算符:=、 +=、 *=、 -=、 /=

二、JavaScript运算符的规则

1、算术运算符规则

“+”:可以进行“加法”与“连接”运算;如果2个运算符中的一个是字符串,javascript就将另一个转换成字符串,然后将2个运算数连接起来。

“+”:如果一个运算数是对象,javascript就会将对象转换成数字做加法运算或者字符串做连接运算;

“-”“*”“/” 如果2个运算数中的一个是是非数字,则将它转化成数字执行数学运算。

“/” 在javascript中,由于所有的数都是浮点数,除法的结果都是浮点数,5 / 2 = 2.5 ;除数为0的结果为正负无穷;0/0为NaN;

“%”模运算符:计算第一个运算数对第二个运算数的模,就是第一个运算数被第二个运算数除时,返回余数。如果运算数是非数字的,则转换成数字。

“-”一元取反:将运算数取反,如果运算数不是数字,则转化成数字。

“++”“--”增量运算符/减量运算符号:运算数必须是一个变量、树组的一个元素或对象的一个属性。如果运算数不是数字,则转换成数字。

注意:如果“++”位于运算数之前,先对运算数进行增量,然后计算运算数增长后的值。

如果“--”位于运算数之后,先计算运算数未增长之前的值,然后对运算数增量。

例如:i = 1; //赋值给i值1

j = ++i; //先将i增量为2,然后将2赋值给j,i的值是2,j的值也是2。

i = 1; //赋值给i值1

j = i++; //先将i赋值给j,然后对将i值增量到2,i的值是2,j的值是1。

减量运算符“--”与“++”相同。

2、等同运算符与全同运算符

(I)“==”“!==”等同运算符与非等同运算符:

比较2个运算数,返回一个不布尔值。

比较数值、字符串、布尔值使用的都是量值。当且仅当两个变量存放的值相等的时候,他们才相等。

比较对象、数组、函数的时候,使用的是引用,只有2个变量引用的是同一个对象时,他们才是相等的。两个不同的数组是完全不同的,即使他们具有完全相同的元素。对于存放对象、数组、函数的引用的变量来说,只有当他们引用的是同一个对象、数组、函数的时候,他们才相等。

注意!应遵循的原则:

当两个运算数的类型不同时:将他们转换成相同的类型,

1)一个数字与一个字符串,字符串转换成数字之后,进行比较。

2)true转换为1、false转换为0,进行比较。

3)一个对象、数组、函数 与 一个数字或字符串,对象、数组、函数转换为原始类型的值,然后进行比较。(先使用valueOf,如果不行就使用toString)

4)其他类型的组合不星等。

想两个运算数类型相同,或转换成相同类型后:

1)2个字符串:同一位置上的字符相等,2个字符串就相同。

2)2个数字:2个数字相同,就相同。如果一个是NaN,或两个都是NaN,则不相同。

3)2个都是true,或者2个都是false,则想同。

4)2个引用的是同一个对象、函数、数组,则他们相等,如果引用的不是同一个对象、函数、数组,则不相同,即使这2个对象、函数、数组可以转换成完全相等的原始值。

5)2个null,或者2个都是未定义的,那么他们相等。

“!=”非等同运算符:与等同运算符检测的结果相反。

(II)“===”“!===”全同运算符与非全同运算符号:

全同运算符遵循等同运算符的比较规则,但是它不对运算数进行类型转换,当两个运算数的类型不同时,返回false;只有当两个运算数的类型相同的时候,才遵循等同运算符的比较规则进行比较。

“!==”非全同运算符与全同运算符比较的结果相反。如果两个运算数的类型或者值不同的时候,返回true。

3、比较运算符

这些比较运算符用于比较不同类型的值,结果返回一个布尔值。

“<”“>”“<=”“>=”

注意规则:比较的运算数可以是任意类型的,但是只能在数字和运算数上执行。不是数字和字符串的运算数将被转换成数字或字符串。

1)如果两个运算数都是数字,或者都可以转换成数字,则按照数字的大小进行比较;

2)如果两个运算数都是字符串,或者都可以转换成字符串,则将按照字母顺序进行比较;

3)如果字符串遇到数字,则将字符串转换成数字进行比较。

4)如果运算数既不能转换成数字,也不能转换成字符串,则返回结果false。

4、字符串运算符

并没有专用的字符串运算符,只是有些运算符在遇到字符串运算数的时候,表现不同。

(I)“+”连接2个字符串;

1)当2个运算数都是字符串的时候,连接起来;

2)当其中有一个是数字的时候,将数字转换成字符串,连接起来;

(II)“>”这样的比较运算符通过比较确认两个字符串的顺序,比较采用字符的顺序,较小的位于教大的前面,大写字母位于小写字母之前。

(III)“+”的作用方法取决于计算顺序,

如:s = 1 + 2 +"var" 则:返回结果3var; 因为先计算1+2,然后将结果3转换成字符串与"var"连接;

如:s = "var" + 1 + 2 则:返回结果var12; 因为先计算var与1的连接,在将结果var1与转换成字符串的2连接起来。

5、逻辑运算符

用于执行布尔运算,常常和比较运算符一起使用,来表示复杂的比较运算。

“&&” 逻辑与运算、“||”逻辑或运算符、“!”逻辑非运算符

(I)“&&”当两个运算数都是布尔值的时候,逻辑与对他们进行and操作,即:当且仅当两个布尔值都是true的时候,返回结果true,否则返回false。

注意:实际表现

“&&”将检测第一个表达式运算数布尔值,如果第一个运算数表达式返回false,则返回左边第一个运算数表达式的值:false;否则将继续检测第二个即右边的运算数表达式,然后返回第二个运算数表达式的值;

例如:if (a = b) stop(); 与 (a = b) && stop(); 等价

不赞成使用这个方法,因为运算符右边的代码不能保证会被执行,

例如:if ((a < b) && (b++ <10) ) stop();如果运算符右边的增量必须的话,却有可能由于前面的返回值而不被执行,一般反对在&&的右边使用具有其他作用的表达式(赋值、函数调用、增减量);

将“&&”看作是一个布尔代数的运算符,会更简单与安全。

(II)“||”当两个运算数都是布尔值的时候,逻辑或对他们进行or操作,即:当两个布尔值有一个是true的时候,返回结果true,否则返回false。

注意:实际表现

“||”将检测第一个表达式运算数布尔值,如果第一个运算数表达式返回true,则返回左边第一个运算数表达式的值:true;否则将继续检测第二个即右边的运算数表达式,然后返回第二个运算数表达式的值;

同样不赞成使用这个方法,因为运算符右边的代码不能保证会被执行,

一般反对在||的右边使用具有其他作用的表达式(赋值、函数调用、增减量);

将“||”看作是一个布尔代数的运算符,会更简单与安全。

(III)“!”逻辑非是一个一元运算符,放在运算数之前,它的目的是对运算数取反。

6、赋值运算符

(I)“=”是赋值运算符;他总是期望左边的运算数是一个变量、数组的一个元素或对象的一个属性;

期望右边是一个任意类型的任意的值;

从右到左的结合性,如果一个表达式中有多个赋值运算符,则从最右边开始计算。

注意:每一个赋值表达式都有一个值,就是运算符右边的值;

(II)可以使用带操作的赋值运算

“+=” 左边的值加上右边的值后,赋值于左边的值。“-=”“/=”“*=”方法一样;

7、其他运算符

“?:”条件运算符是唯一的一个三元运算符;

一个表达式的布尔结果?表达式1(任意类型的任意值):表达式2(任意类型的任意值);

根据第一个运算数的布尔值结果,如果为true,则执行第二个运算数表达式,返回第二个运算数表达式的值;如果第一个运算数的布尔值结果是false,则执行第三个运算数表达式,返回第三个运算数表达式的值。

三、JavaScript运算符的注意

1、要注意传递给运算符的数据类型和返回的数据类型!不同的运算符都期望它的运算数表达式计算出的结果符合某种数据类型。

例如:对字符串是不能进行乘法运算的,"a" * "b" 是不合法的,但是,在可能的情况下,javascript会把表达式转换成正确的类型,因此,表达式 "3" * "5" 是合法的,javascript将字符串转换成数字执行运算,结果返回的是数字15,而不是字符串"15"。

2、+ 根据运算数的不同,具有不同的表现:

字符串 + 字符串 = 字符串(被连接);"a" + "b" = "ab" "5" + "6" = "11"

字符串 + 数字 = (字符串转换成数字)字符串(被连接);"a" + 5 = "a5" 5被转换成字符串 "1" + 0 = "10"

数字 + 数字 = 数字(相加)5 + 5 = 10。

3、注意运算符的结合性,有些运算符从左到右的结合性;有些从右到左结合性。

例如:w = a + b + c 等同于 w = (a + b) + c;

w = ---b 等同于 w = - ( - ( -b ) ); w = a = b = c 等同于 w= ( a = ( b = c ))

一元运算符、赋值运算符、三元运算符的结合性是从右到左的;

JavaScript的运算符就为大家介绍到这里了,希望能对大家在日常中有所帮助。

Javascript 相关文章推荐
JavaScript Perfection kill 测试及答案
Mar 23 Javascript
最新28个很棒的jQuery 教程
May 28 Javascript
js获取浏览器的可视区域尺寸的实现代码
Nov 30 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
Apr 16 Javascript
jQuery解决input超多的表单提交
Aug 10 Javascript
js实现适用于素材网站的黑色多级菜单导航条效果
Aug 24 Javascript
即将发布的jQuery 3 有哪些新特性
Apr 14 Javascript
javascript遍历json对象的key和任意js对象属性实例
Mar 09 Javascript
Chrome调试折腾记之JS断点调试技巧
Sep 11 Javascript
JavaScript实现的原生态Tab标签页功能【兼容IE6】
Sep 18 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
Aug 27 Javascript
Vue数字输入框组件示例代码详解
Jan 15 Javascript
JQuery页面图片切换和新闻列表滚动效果的具体实现
Sep 26 #Javascript
Jquery实现图片左右自动滚动示例
Sep 25 #Javascript
jquery实现加载等待效果示例
Sep 25 #Javascript
js的onload事件及初始化按钮事件示例代码
Sep 25 #Javascript
jquery实现table鼠标经过变色代码
Sep 25 #Javascript
js跨浏览器实现将字符串转化为xml对象的方法
Sep 25 #Javascript
仿百度的关键词匹配搜索示例
Sep 25 #Javascript
You might like
PHP图片上传代码
2013/11/04 PHP
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
2014/05/04 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
php中 $$str 中 &quot;$$&quot; 的详解
2015/07/06 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
vue todo-list组件发布到npm上的方法
2018/04/04 Javascript
微信小程序实现左滑动删除效果
2020/03/30 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
[01:05:07]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第一场2月1日
2021/03/11 DOTA
python将xml xsl文件生成html文件存储示例讲解
2013/12/03 Python
Windows下为Python安装Matplotlib模块
2015/11/06 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
python模拟事件触发机制详解
2018/01/19 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
客户代表自我评价范例
2013/09/24 职场文书
火锅店营销方案
2014/02/26 职场文书
社区春季防火方案
2014/06/02 职场文书
乡镇群众路线专项整治方案
2014/11/03 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
MySQL控制流函数(-if ,elseif,else,case...when)
2022/07/07 MySQL