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 相关文章推荐
密码强度检测效果实现原理与代码
Jan 04 Javascript
JS方法调用括号的问题探讨
Jan 24 Javascript
jquery解析xml字符串简单示例
Apr 11 Javascript
javascript实现全角半角检测的方法
Jul 23 Javascript
JavaScript实现数据类型的相互转换
Mar 06 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
Mar 10 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
May 11 Javascript
关于javascript sort()排序你可能忽略的一点理解
Jul 18 Javascript
微信小程序template模板实例详解
Oct 27 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
Feb 18 jQuery
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
Feb 27 jQuery
vue实现同时设置多个倒计时
May 20 Vue.js
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
SONY ICF-SW55的电路分析
2021/03/02 无线电
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
PHP实现设计模式中的抽象工厂模式详解
2014/10/11 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
js停止输出代码
2008/07/20 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
微信小程序 简单教程实例详解
2017/01/13 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
Python中的各种装饰器详解
2015/04/11 Python
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
Python简单定义与使用字典dict的方法示例
2017/07/25 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
美国最大的无人机经销商:DroneNerds
2018/03/20 全球购物
企业内部培训方案
2014/02/04 职场文书
银行内勤岗位职责
2014/04/09 职场文书
《风筝》教学反思
2014/04/10 职场文书
食品安全工作方案
2014/05/07 职场文书
环保小标语
2014/06/13 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android
PYTHON InceptionV3模型的复现详解
2022/05/06 Python
阿里云服务器部署RabbitMQ集群的详细教程
2022/06/01 Servers