JavaScript進階程式設計閱讀筆記(五) ECMAScript中的運算子(一)

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.