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

 更新时间:2012年02月27日 23:38:21   作者:  
ECMAScript中的运算符,学习js的朋友可以看看
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中的FileReader图片预览上传功能实现代码

    JavaScript中的FileReader图片预览上传功能实现代码

    本文通过实例代码给大家介绍了js中的FileReader图片预览上传功能,代码分为html和js代码两部分,具体实现代码大家参考下本文
    2017-07-07
  • JavaScript 浮点数运算 精度问题

    JavaScript 浮点数运算 精度问题

    JavaScript小数在做四则运算时,精度会丢失,这会在项目中引起诸多不便,先请看下面脚本。
    2009-10-10
  • webpack css加载和图片加载的方法示例

    webpack css加载和图片加载的方法示例

    这篇文章主要介绍了webpack css加载和图片加载的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • undefined与null的区别示例详解

    undefined与null的区别示例详解

    这篇文章主要为大家介绍了undefined与null的区别示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • js弹出窗口简单实现代码

    js弹出窗口简单实现代码

    这篇文章主要为大家详细介绍了js弹出窗口的简单实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • 使用console进行性能测试

    使用console进行性能测试

    各大浏览器内置的开发工具,都提供了一个console对象。它主要有两个作用:显示网页代码运行时的错误信息。提供了一个命令行接口,用来与网页代码互动。下面我们就来详细研究下如何使用console进行性能测试。
    2015-04-04
  • 用原生JS对AJAX做简单封装的实例代码

    用原生JS对AJAX做简单封装的实例代码

    下面小编就为大家带来一篇用原生JS对AJAX做简单封装的实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • js抽奖转盘实现方法分析

    js抽奖转盘实现方法分析

    这篇文章主要介绍了js抽奖转盘实现方法,结合实例形式分析了js抽奖转盘原理、实现方法与操作注意事项,需要的朋友可以参考下
    2020-05-05
  • Bootstrap中定制LESS-颜色及导航条(推荐)

    Bootstrap中定制LESS-颜色及导航条(推荐)

    这篇文章主要介绍了Bootstrap中定制LESS-颜色及导航条的相关资料,非常不错具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-11-11
  • 用JS控制回车事件的代码

    用JS控制回车事件的代码

    在写代码的时候偶尔会碰到被回车按钮所纠结的时候,例如上周客户反应我们的产品在页面按回车后,总是自动登出,而不是提交数据,客户对此也是意见很大。
    2011-02-02

最新评论