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


Posted in Javascript onFebruary 27, 2012

2.9 运算符
2.9.1、一元运算符

一元运算符只有一个参数,即要操作的对象或值。

1、delete:删除对以前定义的对象属性或方法的引用,但此运算符不能删除开发者未定义的属性和方法。示例:

var o=new Object; 
o.name="Nicholas"; 
o.show=function(){ 
return "test"; 
}; 
console.log(o.name); //outpus Nicholas 
console.log(o.show()); //outpus test delete o.name; 
delete o.show; 
console.log(o.name); //outpus undefined 
console.log(o.show()); //outpus TypeError: o.show is not a function 
delete o.toString; 
console.log(o.toString()); //outpus [object Object]

2、void:对任何值都返回undefined,该运算符通常用于避免输出不应该输出的值。

如在链接中打开新窗口,代码如下:

<a href="javascript:window.open('about:blank')">Click Me</a>

点击链接后会在新窗口中出现[object]。这是因为window.open()方法返回了对新打开窗口的引用。然后该对象将被转换成要显示的字符串。要避免这种结果,可以用void运算符调用window.open()函数:

<a href="javascript:void(window.open('about:blank'))">Click Me</a>

3、前增量/前减量运算符:从C中借用的两个运算符。示例:

var iNum=10; 
console.log(++iNum); //outpus 11 same as iNum=iNum+1 
console.log(iNum); //outpus 11 
console.log(--iNum); //outpus 10 same as iNum=iNum-1 
console.log(iNum); //outpus 10

4、后增量/后减量运算符:从C中借用的两个运算符。与前增量/前减量一样,也是给数值加1或减1,不同的是后缀式运算符是在计算过包含它们的表达式后才进行增量或减量运算的。示例:
var iNum=10; 
iNum-- 
console.log(iNum); //outpus 9 
console.log(iNum--); //outpus 9 
console.log(iNum); //outpus 8 
iNum++ 
console.log(iNum); //outpus 9 
console.log(iNum++); //outpus 9 
console.log(iNum); //outpus 10

 5、一元加法和一元减法:用法与高中数学中学到的用法相同,一元加法对数字无任何影响,一元减法就是对数值求负。但一元回法和一元减法对字符串进行运算时与parseInt()相似,主要的不同是只有对以"ox"开头的字符串,一元运算符才把它转换为10进制的值。示例:
var iNum=25; 
iNum=+iNum; 
console.log(iNum); //outpus 25 var sNum="50"; 
console.log(typeof sNum); //outpus string 
console.log(+sNum); //outpus 50 
console.log(typeof +sNum); //outpus number 
var sNum1="017"; 
var sNum2="0xB"; 
console.log(-sNum1); //outpus -17 
console.log(-sNum2); //outpus -11

2.9.2 位运算符

1、位运算NOT:由(~)表示,处理过程如下:

(1) 把运算数转换为32位数字

(2) 把二进制形式转换成它的二进制反码;

(3) 把二进制反码转换为浮点数

示例:

var iNum1=25; //25 is equal to 0000 0000 0000 0000 0000 0000 0001 1001 
var iNum2=~iNum1; //conver to 1111 1111 1111 1111 1111 1111 1110 0110 
console.log(iNum2); //outpus -26 //位运算符NOT实质上是对数字求负,然后减1,因此下面的代码也可以得到同样的效果 
var iNum3=25; 
var iNum4=-iNum3-1; 
console.log(iNum4);

2、位运算AND:由(&)表示,直接对数字的二进制形式进行计算。规则为全为1才为1,否则为0。示例:
var iNum1=25; //25 is equal to 0000 0000 0000 0000 0000 0000 0001 1001 
var iNum2=iNum1&3; // 3 is equal to 0000 0000 0000 0000 0000 0000 0000 0011 
console.log(iNum2); // and is 0000 0000 0000 0000 0000 0000 0000 0001 outpus 1

3、位运算OR:由(|)表示,直接对数字的二进制形式进行计算。规则为全为0才为0,否则为1。示例:

var iNum1=25; //25 is equal to 0000 0000 0000 0000 0000 0000 0001 1001 
var iNum2=iNum1|3; // 3 is equal to 0000 0000 0000 0000 0000 0000 0000 0011

4、位运算XOR:由(^)表示,直接对数字的二进制形式进行计算。规则为只有一个数位存放的是1时才为1,否则为0。示例:

var iNum1=25; //25 is equal to 0000 0000 0000 0000 0000 0000 0001 1001 
var iNum2=iNum1^3; // 3 is equal to 0000 0000 0000 0000 0000 0000 0000 0011 
console.log(iNum2); // xor is 0000 0000 0000 0000 0000 0000 0001 1010 outpus 26

5、左移运算:由(<<)表示,把数字中的所有数位向左移动指定的数量,保留符号位,左移一位相当于乘以2。

6、有符号右移运算:由(>>)表示,把数字中的所有数位向右移动指定的数量,保留符号位,右移一位相当于除以2。

7、无符号右移运算:由(>>>)表示,把数字中的所有数位向右移动指定的数量。对于正数跟有符号的右移完全一样,对于负数作为正数来处理。

示例:

var iOld=2; 
var iOld1=64; 
var iOld2=64; 
var iOld3=-2; 
var iNew=iOld<<5; 
var iNew1=iOld1>>5; 
var iNew2=iOld2>>>5; 
var iNew3=iOld3>>>1; 
console.log(iNew); //outpus 64 
console.log(iNew1); //outpus 2 
console.log(iNew2); //outpus 2 
console.log(iNew3); //outpus 2147483647

负数iOld3无符号右移的计算方法如下:

先把-2转换成无符号的等价形式,即-2的二进制补码:

-2的非负版本二进制表示:0000 0000 0000 0000 0000 0000 0000 0010

该二进制的反码:1111 1111 1111 1111 1111 1111 1111 1101

在二进制反码上加1:1111 1111 1111 1111 1111 1111 1111 1110

最后再右移一位:0111 1111 1111 1111 1111 1111 1111 1111 即为:2147483647
2.9.3 Boolean运算符

1、逻辑NOT:由(!)表示,返回值一定是Boolean值,行为如下:

如果运算数是对象,返回false

如果运算数是数字0,运回true

如果运算数是0以外的任何数字,反回false

如果运算数是null,返回true

如果运算数是NaN,返回true

如果运算数是undefined,发生错误

2、逻辑AND:由(&&)表示,如果运算数均为Boolean型,只有当运算数均为true时才返回true,否则返回false。AND运算的运算数可以是任何类型,返回值不一定是Boolean值:

如果一个运算数是对象,另一个是Boolean值,返回该对象

如果两个运算数都是对象,返回第二个对象

如果某个运算数是null,返回null

如果某个运算数是NaN,返回NaN

如果某个运算数是undefined,发生错误

ECMAScript中的逻辑AND也是简便运算,即如果第一个运算数决定了结果,就不再计算第二个运算数,示例:

var bFalse=false; 
var bResult=bFalse&&bUnknow; 
console.log(bResult); //outpus false 
var bTrue=true; 
var bResult=bTrue&&bUnknow; 
console.log(bResult); //outpus ReferenceError: bUnknow is not defined

3、逻辑OR运算符:由(||)表示,如果运算数均为Boolean型,只有当运算数均为false时才返回false,否则返回true。OR运算的运算数可以是任何类型,返回值不一定是Boolean值:

如果一个运算数是对象,另一个是Boolean值,返回该对象

如果两个运算数都是对象,返回第一个对象

如果某个运算数是null,返回null

如果某个运算数是NaN,返回NaN

如果某个运算数是undefined,发生错误

ECMAScript中的逻辑OR也是简便运算,即如果第一个运算数决定了结果,就不再计算第二个运算数,示例:

var bTrue=true; 
var bResult=bTrue||bUnknow; 
console.log(bResult); //outpus true 
var bFalse=false; 
var bResult=bFalse||bUnknow; 
console.log(bResult); //outpus ReferenceError: bUnknow is not defined

2.9.4 乘性运算符

1、乘法运算符:由(*)表示,正常情况下跟数学中的乘法相同,特殊情况下有些特殊值:

如果运算的结果太大或太小,生成结果为Infinity或-Infinity

如果某个运算数是NaN,结果为NaN

Infinity乘以0,结果为NaN

Infinity乘以0以外的任何数字,结果为Infinity或-Infinity,由第二个运算数的符号决定

Infinity乘以Infinity,结果为Infinity

2、除法运算符:由(/)表示,正常情况下跟数学中的乘法相同,特殊情况下有些特殊值:

如果运算的结果太大或太小,生成结果为Infinity或-Infinity

如果某个运算数是NaN,结果为NaN

Infinity被Infinity除,结果为NaN

Infinity被任何数字除,结果为Infinity

0除以一个非无穷大的数字,结果为NaN

Infinity被0以外的任何数字除,结果为Infinity或-Infinity,由第二个运算数的符号决定

3、取模运算符:由(%)表示,正常情况下跟数学中的乘法相同,特殊情况下有些特殊值:

如果被除数是Infinity,或者除数是0,结果为NaN

Infinity被Infinity除,结果为NaN

如果除数是无穷大的数,结果为被除数

如果被除数为0,结果为0

Javascript 相关文章推荐
建议大家看下JavaScript重要知识更新
Jul 08 Javascript
Javascript 构造函数,公有,私有特权和静态成员定义方法
Nov 30 Javascript
jQuery UI AutoComplete 使用说明
Jun 20 Javascript
Kibo 用于处理键盘事件的Javascript工具库
Oct 28 Javascript
Bootstrap每天必学之面板
Nov 30 Javascript
基于node.js制作简单爬虫教程
Jun 29 Javascript
VUE实现表单元素双向绑定(总结)
Aug 08 Javascript
Vue中封装input组件的实例详解
Oct 17 Javascript
vue.js编译时给生成的文件增加版本号
Sep 17 Javascript
vue动画打包后失效问题的解决方法
Sep 18 Javascript
一文快速详解前端框架 Vue 最强大的功能
May 21 Javascript
JS计算斐波拉切代码实例
Sep 12 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
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
Feb 27 #Javascript
You might like
php开发环境配置记录
2011/01/14 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
2013/06/26 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
yepnope.js使用详解及示例分享
2014/06/23 Javascript
js动态添加onclick事件可传参数与不传参数
2014/07/29 Javascript
jQuery操作JSON的CRUD用法实例
2015/02/25 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
原生js实现手风琴功能(支持横纵向调用)
2017/01/13 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
AngularJS自定义指令之复制指令实现方法
2017/05/18 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
移动端如何用下拉刷新的方式实现上拉加载
2018/12/10 Javascript
JS实现随机抽选获奖者
2019/11/07 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
2017/09/26 Python
Tornado高并发处理方法实例代码
2018/01/15 Python
python async with和async for的使用
2019/06/20 Python
python字典的遍历3种方法详解
2019/08/10 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
pycharm实现猜数游戏
2020/12/07 Python
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
师范院校学生自荐信范文
2013/12/27 职场文书
接受捐赠答谢词
2014/01/27 职场文书
支部鉴定材料
2014/06/02 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
学校少先队工作总结
2015/08/12 职场文书
劳动保障事务所个人工作总结
2015/08/12 职场文书