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 25 Javascript
修复ie8&amp;chrome下window的resize事件多次执行
Oct 20 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
Mar 11 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
Oct 16 Javascript
js友好的时间返回函数
Aug 24 Javascript
JQuery遍历元素的父辈和祖先的方法
Sep 18 Javascript
jQuery图片切换动画特效
Nov 02 Javascript
详解Javascript数据类型的转换规则
Dec 12 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
Apr 17 Javascript
ng-zorro-antd 入门初体验
Dec 03 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
Apr 11 Javascript
如何在Express4.x中愉快地使用async的方法
Nov 18 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
服务器端解压缩zip的脚本
2006/12/22 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
2016/09/09 PHP
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
2013/05/19 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
Javascript监视变量变化的方法
2015/06/09 Javascript
javascript实现点击提交按钮后显示loading的方法
2015/07/03 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
使用Curl命令查看请求响应时间方法
2016/11/04 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
vue实现拖拽效果
2019/12/23 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
Django model序列化为json的方法示例
2018/10/16 Python
python 实现人和电脑猜拳的示例代码
2020/03/02 Python
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
.NET面试问题集
2015/12/08 面试题
生物制药自我鉴定
2014/01/25 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
小学副班长竞选稿
2015/11/21 职场文书
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server
Python编写nmap扫描工具
2021/07/21 Python