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 autocomplete插件修改
Apr 17 Javascript
基于jquery的跨域调用文件
Nov 19 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
May 08 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
Jun 08 Javascript
Iframe实现跨浏览器自适应高度解决方法
Sep 02 Javascript
JS常用函数使用指南
Nov 23 Javascript
浅谈Javascript实现继承的方法
Jul 06 Javascript
JS实现支持Ajax验证的表单插件
Mar 24 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
Oct 15 Javascript
js编写选项卡效果
May 23 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
Nov 20 Javascript
Vue点击切换Class变化,实现Active当前样式操作
Jul 17 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者的疑难问答(1)
2006/10/09 PHP
php的sprintf函数的用法 控制浮点数格式
2014/02/14 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
PHP并发多进程处理利器Gearman使用介绍
2016/05/16 PHP
php创建图像具体步骤
2017/03/13 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
2020/05/02 PHP
响应鼠标变换表格背景或者颜色的代码
2009/03/30 Javascript
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
2012/08/17 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
2016/12/14 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
详细解读Python中的__init__()方法
2015/05/02 Python
Anaconda下安装mysql-python的包实例
2018/06/11 Python
pandas.read_csv参数详解(小结)
2019/06/21 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
Keras SGD 随机梯度下降优化器参数设置方式
2020/06/19 Python
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
应届生法律顾问求职信
2013/11/19 职场文书
感恩寄语大全
2014/04/11 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
五四青年节优秀演讲稿范文
2014/05/28 职场文书
班级团队活动方案
2014/08/14 职场文书
综合管理员岗位职责
2015/02/11 职场文书