视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
JavaScript高级程序设计阅读笔记(五)ECMAScript中的运算符(一)_javascript技巧
2020-11-27 21:02:26 责编:小采
文档


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,该运算符通常用于避免输出不应该输出的值。

  如在链接中打开新窗口,代码如下:

Click Me
  点击链接后会在新窗口中出现[object]。这是因为window.open()方法返回了对新打开窗口的引用。然后该对象将被转换成要显示的字符串。要避免这种结果,可以用void运算符调用window.open()函数:

Click Me
  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=;
var iOld2=;
var iOld3=-2;
var iNew=iOld<<5;
var iNew1=iOld1>>5;
var iNew2=iOld2>>>5;
var iNew3=iOld3>>>1;
console.log(iNew); //outpus
console.log(iNew1); //outpus 2
console.log(iNew2); //outpus 2
console.log(iNew3); //outpus 21474837

  负数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 即为:21474837
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

下载本文
显示全文
专题