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 相关文章推荐
关于B/S判断浏览器断开的问题讨论
Oct 29 Javascript
最短的javascript:地址栏载入脚本代码
Oct 13 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
Apr 18 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
Apr 11 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
Oct 16 Javascript
jQuery基础知识点总结(必看)
May 31 Javascript
多种jQuery绑定事件的实现方式
Jun 13 Javascript
jQuery简易时光轴实现方法示例
Mar 13 Javascript
vue router自动判断左右翻页转场动画效果
Oct 10 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
Dec 17 Javascript
javascript设计模式 ? 组合模式原理与应用实例分析
Apr 14 Javascript
vue select 获取value和lable操作
Aug 28 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获取浏览器信息类和客户端地理位置的2个方法
2014/04/24 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
在网页里看flash的trace数据的js类
2009/01/10 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
2016/06/16 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
Vue指令的钩子函数使用方法
2017/03/20 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
实现一个完整的Node.js RESTful API的示例
2017/09/29 Javascript
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
vue穿梭框实现上下移动
2021/01/29 Vue.js
深入Python函数编程的一些特性
2015/04/13 Python
Python中的连接符(+、+=)示例详解
2017/01/13 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
2018/05/08 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
django 微信网页授权登陆的实现
2019/07/30 Python
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
银行出纳岗位职责
2013/11/25 职场文书
企业员工培训感言
2014/02/26 职场文书
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
乡镇安全生产月活动总结
2015/05/08 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
《文化苦旅》读后感:阅读,让人诗意地栖居在大地上
2019/12/24 职场文书
浅谈Python数学建模之线性规划
2021/06/23 Python
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫