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的版本实现执行不同的代码
May 11 Javascript
js 获取(接收)地址栏参数值的方法
Apr 01 Javascript
jquery队列queue与原生模仿其实现方法分享
Mar 25 Javascript
JS实现简单的顶部定时关闭层效果
Jun 15 Javascript
javascript中Array数组的迭代方法实例分析
Feb 04 Javascript
echart简介_动力节点Java学院整理
Aug 11 Javascript
总结js中的一些兼容性易错的问题
Dec 18 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
Mar 01 Javascript
Node.js学习之内置模块fs用法示例
Jan 22 Javascript
javascript设计模式之迭代器模式
Jan 30 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
Jul 31 Javascript
vue实现省市区联动 element-china-area-data插件
Apr 22 Vue.js
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
ThinkPHP之M方法实例详解
2014/06/20 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
laravel中的错误与日志用法详解
2016/07/26 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
popdiv
2006/07/14 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
2013/09/10 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
详解如何使用React Hooks请求数据并渲染
2020/10/18 Javascript
python 根据pid杀死相应进程的方法
2017/01/16 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
Python中IP地址处理IPy模块的方法
2019/08/16 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
Python语法之精妙的十个知识点(装B语法)
2020/01/18 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
Python运算符+与+=的方法实例
2021/02/18 Python
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
俄罗斯商务邀请函
2014/01/26 职场文书
工程安全员岗位职责
2014/03/09 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL
CSS子盒子水平和垂直居中的五种方法
2022/07/23 HTML / CSS