JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)


Posted in Javascript onFebruary 27, 2012

2.9.5、加性运算符

加性运算符(即加号和减号)通常是最简单的运算符,不过在ECMAScript中,每个加性运算符都有大量的特殊行为。

1、加法运算符:

var iResult=1+2; 
console.log(iResult);//outputs 3

特殊性:

某个运算数是NaN,结果为NaN
Infinity加Infinity,结果为Infinity
-Infinity加-Infinity,结果为-Infinity
Infinity加-Infinity,结果为NaN
如果两个运算数都是字符串,把第二个字符串连接到第一个字符串上
如果只有一个运算数是字符串,把另一个运算数转换为字符串,结果是两个字符串连接成的字符串

示例:

var iResult2=NaN+1; 
console.log(iResult2);//NaN var iResult3=Infinity+Infinity; 
console.log(iResult3);//Infinity 
var iResult4=-Infinity-Infinity; 
console.log(iResult4);//-Infinity 
var iResult5="abc"+"bcd"; 
console.log(iResult5);//abcbcd 
var iResult6=5+"5"; 
console.log(iResult6);//55

2、减法运算符:
var iResult=2-1; 
console.log(iResult);//1

特殊性:

某个运算数是NaN,结果为NaN
Infinity减Infinity,结果为NaN
-Infinity减-Infinity,结果为NaN
Infinity减-Infinity,结果为Infinity
-Infinity减-Infinity,结果为-Infinity
如果两个运算数都是字符串,结果为NaN
如果只有一个运算数是字符串,把字符串转换为数字再进行运算

示例:

var iResult2=NaN-1; 
console.log(iResult2);//NaN var iResult3=Infinity-Infinity; 
console.log(iResult3);//NaN 
var iResult4=-Infinity-(-Infinity); 
console.log(iResult4);//NaN 
var iResult5=-Infinity-Infinity; 
console.log(iResult5);//-Infinity 
var iResult6=Infinity-(-Infinity); 
console.log(iResult6);//Infinity 
var iResult7="abc"-"a"; 
console.log(iResult7);//NaN 
var iResult8="5"-5; 
console.log(iResult8);//0 
var iResult9="a"-5; 
console.log(iResult9);//NaN

2.9.6、关系运算符

关系运算符<、>、<=、>=执行的是两个数字的比较运算,返回的是一个Boolean值。如果两个操作数都是字符串,则逐一比较两个字符串的ASC码,如果只有一方是字符串,则把字符串转换为数字后比较,示例如下:

var bResult=2<1; 
console.log(bResult);//false var bResult="B"<"a"; 
console.log(bResult);//true 
var bResult="b"<"a"; 
console.log(bResult);//false 
var bResult="13"<"2"; 
console.log(bResult);//true 
var bResult=13<"2"; 
console.log(bResult);//false 
var bResult=-1<"a"; 
console.log(bResult);//false

第17行的代码中,"a"被转换为数字时返回的是NaN,任何包含NaN的关系运算都要返回false。

2.9.7、等性运算符

1、等号和非等号

在ECMAScript中,等号(==)及非等号(!=)都返回Boolean值。为确定两个运算数是否相等,这两个运算数都会进行类型转换,转换规则如下:

如果一个运算数是Boolean值,在检查相等性之前,把它转换成数字值。false转换成0,true转换成1。
如果一个运算数是字符串,另一个运算数是数字,在检查相等性之前,要尝试把字符串转换成数字。
如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。

在进行比较时,运算符还遵循还列规则:

值null和undefined相等
在检查相等性时,不能把null和undefined转换成其他值。
如果某个运算数是NaN,等号将返回false,非等号将返回true。重要提示:即使两个运算数都是NaN,等号仍返回false,因为根据规则,NaN不等于NaN。
如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数把向同一个对象,那么等号返回true,否则两个运算数不等。

示例:

console.log(null==undefined);//true 
console.log("NaN"==NaN);//false 
console.log(5==NaN);//false 
console.log(NaN==NaN);//false 
console.log(NaN!=NaN);//true 
console.log(false==0);//true 
console.log(true==1);//true 
console.log(true==2);//false 
console.log(undefined==0);//false 
console.log(null==0);//false 
console.log("5"==5);//true

2、全等号和非全等号

等号和非等号的同类运算符是全等号和非全等号。这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换。全等号由三个等号(===)表示,非全等号由感叹号加两个等号(!==)表示,只有在无需类型转换运算数就相等的情况下,才返回true。例如:

console.log("55"==55);//true 
console.log("55"===55);//false 
console.log("55"!=55);//false 
console.log("55"!==55);//true

2.9.8、条件运算符

条件运算符跟其他语言中的相同:varialbe=boolean_expression?true_value:false_value;

示例:

function Max(iNum1,iNum2){ 
return iNum1>=iNum2?iNum1:iNum2; 
} 
console.log(Max(1,3));//3 
console.log(Max(3,1));//3

2.9.9、赋值运算符

简单的赋值运算符由等号(=)实现,只是把等号右边的值赋予等号左边的变量,例如:

var iNum=10;

复合赋值运算是由乘性运算符、加性运算符或位移运算符加等号(=)实现的。这些赋值运算符是下列这些常见情况的缩写形式:

var iNum=10; 
iNum=iNum+10; //等同于 
var iNum=10; 
iNum+=10;

每种主要的算术运算及其他几个运算都有复合赋值运算符:

乘法/赋值(*=)
除法/赋值(/=)
取模/赋值(%=)
加法/赋值(+=)
减法/赋值(-=)
左移/赋值(<<=)
有符号右移/赋值(>>=)
无符号右移/赋值(>>>=)
2.9.10、逗号运算符

用逗号运算符可以在一条语句中执行多个运算。例如:

var iNum=1,iNum2=2,iNum3=3;

逗号运算符最常用于变量声明中。

Javascript 相关文章推荐
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
Mar 12 Javascript
JS下拉缓冲菜单示例代码
Aug 30 Javascript
js定时器怎么写?就是在特定时间执行某段程序
Oct 11 Javascript
原生JS实现跑马灯效果
Feb 20 Javascript
js实现彩色条纹滚动条效果
Mar 15 Javascript
Angular2使用Angular-CLI快速搭建工程(二)
May 21 Javascript
React组件之间的通信的实例代码
Jun 27 Javascript
提高Node.js性能的应用技巧分享
Aug 10 Javascript
Vue组件实例间的直接访问实现代码
Aug 20 Javascript
Vuejs开发环境搭建及热更新【推荐】
Sep 07 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
May 31 Javascript
关于layui表单中按钮自动提交的解决方法
Sep 09 Javascript
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
Feb 27 #Javascript
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
Feb 27 #Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
Feb 27 #Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
Feb 27 #Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
Feb 27 #Javascript
JavaScript 代码压缩工具小结
Feb 27 #Javascript
根据邮箱的域名跳转到相应的登录页面的代码
Feb 27 #Javascript
You might like
PHP生成HTML静态页面实例代码
2008/08/31 PHP
PHP函数学习之PHP函数点评
2012/07/05 PHP
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
php实现socket推送技术的示例
2017/12/20 PHP
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
2012/02/10 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
js Dialog 去掉右上角的X关闭功能
2014/04/23 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
jQuery实现下拉框左右移动(全部移动,已选移动)
2016/04/15 Javascript
通过javascript进行UTF-8编码的实现方法
2016/06/27 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
jquery分页优化操作实例分析
2019/08/23 jQuery
python轻松实现代码编码格式转换
2015/03/26 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
django xadmin中form_layout添加字段显示方式
2020/03/30 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
AmazeUI在模态框中嵌入表单形成模态输入框
2020/08/20 HTML / CSS
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
网站美工岗位职责
2014/04/02 职场文书
安全承诺书
2015/01/19 职场文书
幼儿园中班教师个人总结
2015/02/05 职场文书
消防安全月活动总结
2015/05/08 职场文书
消防验收申请报告
2015/05/15 职场文书
趣味运动会赞词
2015/07/22 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书
关于antd tree 和父子组件之间的传值问题(react 总结)
2021/06/02 Javascript