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、无符号右移运算:由(>>>)表示,把数字中的所有数位向右移动指定的数量。对于正数跟有符号的右移完全一样,对于负数作为正数来处理。
示例:
复制代码 代码如下: