ECMAScript中的运算符
分类:pc28.am

2.9 运算符 2.9.1、一元运算符 一元运算符只有一个参数,即要操作的对象或值。 1、delete:删除对以前定义的对象属性或方法的引用,但此运算符不能删除开发者未定义的属性和方法。示例: 复制代码 代码如下: var o=new Object; o.name="Nicholas"; o.show=function(){ return "test"; }; console.log; //outpus Nicholas console.log; //outpus test delete o.name; delete o.show; console.log; //outpus undefined console.log; //outpus TypeError: o.show is not a function delete o.toString; console.log; //outpus [object Object] 2、void:对任何值都返回undefined,该运算符通常用于避免输出不应该输出的值。 如在链接中打开新窗口,代码如下: Click Me 点击链接后会在新窗口中出现[object]。这是因为window.open()方法返回了对新打开窗口的引用。然后该对象将被转换成要显示的字符串。要避免这种结果,可以用void运算符调用window.open()函数: Click Me 3、前增量/前减量运算符:从C中借用的两个运算符。示例: 复制代码 代码如下: var iNum=10; console.log; //outpus 11 same as iNum=iNum 1 console.log; //outpus 11 console.log; //outpus 10 same as iNum=iNum-1 console.log; //outpus 10 4、后增量/后减量运算符:从C中借用的两个运算符。与前增量/前减量一样,也是给数值加1或减1,不同的是后缀式运算符是在计算过包含它们的表达式后才进行增量或减量运算的。示例: 复制代码 代码如下: var iNum=10; iNum-- console.log; //outpus 9 console.log; //outpus 9 console.log; //outpus 8 iNum console.log; //outpus 9 console.log; //outpus 9 console.log; //outpus 10 5、一元加法和一元减法:用法与高中数学中学到的用法相同,一元加法对数字无任何影响,一元减法就是对数值求负。但一元回法和一元减法对字符串进行运算时与parseInt()相似,主要的不同是只有对以"ox"开头的字符串,一元运算符才把它转换为10进制的值。示例: 复制代码 代码如下: var iNum=25; iNum= iNum; console.log; //outpus 25 var sNum="50"; console.log; //outpus string console.log; //outpus 50 console.log; //outpus number var sNum1="017"; var sNum2="0xB"; console.log; //outpus -17 console.log; //outpus -11 2.9.2 位运算符 1、位运算NOT:由 把运算数转换为32位数字 把二进制形式转换成它的二进制反码; 把二进制反码转换为浮点数 示例: 复制代码 代码如下: 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; //outpus -26 //位运算符NOT实质上是对数字求负,然后减1,因此下面的代码也可以得到同样的效果 var iNum3=25; var iNum4=-iNum3-1; console.log表示,直接对数字的二进制形式进行计算。规则为全为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; // 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; // 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; //outpus 64 console.log; //outpus 2 console.log; //outpus 2 console.log; //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; //outpus false var bTrue=true; var bResult=bTrue&&bUnknow; console.log; //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; //outpus true var bFalse=false; var bResult=bFalse||bUnknow; console.log; //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

2.9.5、加性运算符
  加性运算符(即加号和减号)通常是最简单的运算符,不过在ECMAScript中,每个加性运算符都有大量的特殊行为。

  1、加法运算符:

复制代码 代码如下:

var iResult=1 2;
console.log(iResult);//outputs 3

特殊性:

某个运算数是NaN,结果为NaN
Infinity加Infinity,结果为Infinity
-Infinity加-Infinity,结果为-Infinity
Infinity加-Infinity,结果为NaN
如果两个运算数都是字符串,把第二个字符串连接到第一个字符串上
如果只有一个运算数是字符串,把另一个运算数转换为字符串,结果是两个字符串连接成的字符串
  示例:

复制代码 代码如下:

var iResult2=NaN 1;
console.log(iResult2);//NaN

var iResult3=Infinity Infinity;
console.log(iResult3);//Infinity

var iResult4=-Infinity-Infinity;
console.log(iResult4);//-Infinity

var iResult5="abc" "bcd";
console.log(iResult5);//abcbcd

var iResult6=5 "5";
console.log(iResult6);//55

2、减法运算符:

复制代码 代码如下:

var iResult=2-1;
console.log(iResult);//1

特殊性:

某个运算数是NaN,结果为NaN
Infinity减Infinity,结果为NaN
-Infinity减-Infinity,结果为NaN
Infinity减-Infinity,结果为Infinity
-Infinity减-Infinity,结果为-Infinity
如果两个运算数都是字符串,结果为NaN
如果只有一个运算数是字符串,把字符串转换为数字再进行运算
  示例:

复制代码 代码如下:

var iResult2=NaN-1;
console.log(iResult2);//NaN

var iResult3=Infinity-Infinity;
console.log(iResult3);//NaN

var iResult4=-Infinity-(-Infinity);
console.log(iResult4);//NaN

var iResult5=-Infinity-Infinity;
console.log(iResult5);//-Infinity

var iResult6=Infinity-(-Infinity);
console.log(iResult6);//Infinity

var iResult7="abc"-"a";
console.log(iResult7);//NaN

var iResult8="5"-5;
console.log(iResult8);//0

var iResult9="a"-5;
console.log(iResult9);//NaN

2.9.6、关系运算符
  关系运算符<、>、<=、>=执行的是两个数字的比较运算,返回的是一个Boolean值。如果两个操作数都是字符串,则逐一比较两个字符串的ASC码,如果只有一方是字符串,则把字符串转换为数字后比较,示例如下:

复制代码 代码如下:

var bResult=2<1;
console.log(bResult);//false

var bResult="B"<"a";
console.log(bResult);//true

var bResult="b"<"a";
console.log(bResult);//false

var bResult="13"<"2";
console.log(bResult);//true

var bResult=13<"2";
console.log(bResult);//false

var bResult=-1<"a";
console.log(bResult);//false

第17行的代码中,"a"被转换为数字时返回的是NaN,任何包含NaN的关系运算都要返回false。

2.9.7、等性运算符
  1、等号和非等号

  在ECMAScript中,等号(==)及非等号(!=)都返回Boolean值。为确定两个运算数是否相等,这两个运算数都会进行类型转换,转换规则如下:

如果一个运算数是Boolean值,在检查相等性之前,把它转换成数字值。false转换成0,true转换成1。
如果一个运算数是字符串,另一个运算数是数字,在检查相等性之前,要尝试把字符串转换成数字。
如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。
  在进行比较时,运算符还遵循还列规则:

值null和undefined相等
在检查相等性时,不能把null和undefined转换成其他值。
如果某个运算数是NaN,等号将返回false,非等号将返回true。重要提示:即使两个运算数都是NaN,等号仍返回false,因为根据规则,NaN不等于NaN。
如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数把向同一个对象,那么等号返回true,否则两个运算数不等。
  示例:

复制代码 代码如下:

console.log(null==undefined);//true
console.log("NaN"==NaN);//false
console.log(5==NaN);//false
console.log(NaN==NaN);//false
console.log(NaN!=NaN);//true
console.log(false==0);//true
console.log(true==1);//true
console.log(true==2);//false
console.log(undefined==0);//false
console.log(null==0);//false
console.log("5"==5);//true

2、全等号和非全等号

  等号和非等号的同类运算符是全等号和非全等号。这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换。全等号由三个等号(===)表示,非全等号由感叹号加两个等号(!==)表示,只有在无需类型转换运算数就相等的情况下,才返回true。例如:

复制代码 代码如下:

console.log("55"==55);//true
console.log("55"===55);//false
console.log("55"!=55);//false
console.log("55"!==55);//true

2.9.8、条件运算符
  条件运算符跟其他语言中的相同:varialbe=boolean_expression?true_value:false_value;
  示例:

复制代码 代码如下:

function Max(iNum1,iNum2){
return iNum1>=iNum2?iNum1:iNum2;
}
console.log(Max(1,3));//3
console.log(Max(3,1));//3

2.9.9、赋值运算符
  简单的赋值运算符由等号(=)实现,只是把等号右边的值赋予等号左边的变量,例如:

var iNum=10;
  复合赋值运算是由乘性运算符、加性运算符或位移运算符加等号(=)实现的。这些赋值运算符是下列这些常见情况的缩写形式:

复制代码 代码如下:

var iNum=10;
iNum=iNum 10;

//等同于
var iNum=10;
iNum =10;

每种主要的算术运算及其他几个运算都有复合赋值运算符:

乘法/赋值(*=)
除法/赋值(/=)
取模/赋值(%=)
加法/赋值( =)
减法/赋值(-=)
左移/赋值(<<=)
有符号右移/赋值(>>=)
无符号右移/赋值(>>>=)
2.9.10、逗号运算符
  用逗号运算符可以在一条语句中执行多个运算。例如:

var iNum=1,iNum2=2,iNum3=3;
  逗号运算符最常用于变量声明中。

加性运算符(即加号和减号)通常是最简单的运算符,不过在ECMAScript中,每个加性运算符都有大量的特殊行为。 1、加法...

本文由pc28.am发布于pc28.am,转载请注明出处:ECMAScript中的运算符

上一篇:JavaScript高端程序设计阅读笔记 下一篇:没有了
猜你喜欢
热门排行
精彩图文