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和HTML5利用canvas构建Web五子棋游戏实现算法
Jul 17 Javascript
javascript定义变量时有var和没有var的区别探讨
Jul 21 Javascript
js实现鼠标经过时图片滚动停止的方法
Feb 16 Javascript
jQuery仿gmail实现fixed布局的方法
May 27 Javascript
JS控制按钮10秒钟后可用的方法
Dec 22 Javascript
基于JavaScript实现简单的随机抽奖小程序
Jan 05 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
Feb 05 Javascript
数组Array的一些方法(总结)
Feb 17 Javascript
jquery将标签元素的高设为屏幕的百分比
Apr 19 jQuery
老生常谈angularjs中的$state.go
Apr 24 Javascript
JavaScript实现的浏览器下载文件的方法
Aug 09 Javascript
CentOS环境中MySQL修改root密码方法
Jan 07 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 Image Resize图片大小调整的函数代码
2011/01/17 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
JQery 渐变图片导航效果代码 漂亮
2010/01/01 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
两行代码轻松搞定JavaScript日期验证
2016/08/03 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
JS实现字符串转驼峰格式的方法
2016/12/16 Javascript
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
详解vue2.0 资源文件assets和static的区别
2018/11/27 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
[02:00]DAC2018主宣传片——龙征四海,剑问东方
2018/03/20 DOTA
python控制台英汉汉英电子词典
2020/04/23 Python
Java分治归并排序算法实例详解
2017/12/12 Python
简单实现python收发邮件功能
2018/01/05 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
python不同版本的_new_不同点总结
2020/12/09 Python
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
应届生煤化工求职信
2013/10/21 职场文书
高中自我评价分享
2013/12/05 职场文书
最新的咖啡店创业计划书
2013/12/30 职场文书
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
党校毕业心得体会
2014/09/13 职场文书
农村党支部书记司法四风问题对照检查材料
2014/09/26 职场文书
介绍信的写法
2015/01/31 职场文书
学习新党章心得体会2016
2016/01/15 职场文书