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 相关文章推荐
js弹窗代码 可以指定弹出间隔
Jul 03 Javascript
理解Javascript_01_理解内存分配原理分析
Oct 11 Javascript
javaScript NameSpace 简单说明介绍
Jul 18 Javascript
通过一段代码简单说js中的this的使用
Jul 23 Javascript
JavaScript动态插入script的基本思路及实现函数
Nov 11 Javascript
js 金额格式化来回转换示例
Feb 23 Javascript
jQuery基于扩展简单实现倒计时功能的方法
May 14 Javascript
详解Chai.js断言库API中文文档
Jan 31 Javascript
JavaScript中的E-mail 地址格式验证
Mar 28 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
May 12 Javascript
JS实现简单的文字无缝上下滚动功能示例
Jun 22 Javascript
Postman动态获取返回值过程详解
Jun 30 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数据库连接类~~做成一个分页类!
2006/11/25 PHP
开发大型 PHP 项目的方法
2007/01/02 PHP
PHP 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
php preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
php ci框架验证码实例分析
2013/06/26 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
yii2.0实现pathinfo的形式访问的配置方法
2016/04/06 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
js 表单验证方法(实用)
2009/04/28 Javascript
js根据给定的日期计算当月有多少天实现思路及代码
2013/02/25 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
基于jquery实现省市联动特效
2015/12/17 Javascript
浅谈react+es6+webpack的基础配置
2017/08/09 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
讲解Python中的递归函数
2015/04/27 Python
在Python中操作日期和时间之gmtime()方法的使用
2015/05/22 Python
python开发之字符串string操作方法实例详解
2015/11/12 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
python 对key为时间的dict排序方法
2018/10/17 Python
python将字符串list写入excel和txt的实例
2019/07/20 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
Python之Sklearn使用入门教程
2021/02/19 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
酒店中秋节活动方案
2014/01/31 职场文书
创业者是否需要商业计划书?
2014/02/07 职场文书
施工安全协议书范本
2014/09/26 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
十大最强飞行系宝可梦,BUG燕上榜,第二是飞行系王者
2022/03/18 日漫