javascript操做符知識點整理

前言

初學者會以爲操做符的知識很簡單,可是隨着學習的深刻會發現不少語句均可以用操做符來簡化,因此深刻理解操做符能夠幫助你寫出高性能的代碼。這篇文章主要記錄不一樣操做符所遵循的規則。
javascript的操做符有一元操做符位操做符布爾操做符乘性操做符加性操做符關係操做符相等操做符條件操做符賦值操做符其中值得注意的是,一元操做符和相等操做符都有可能改變操做數的數值類型。js中的操做符的不一樣之處在於,它們可以適用於不少值,例如字符串、數字值、布爾值、甚至對象。不過在應用於對象時,相應的操做符都會調用對象的valueOf()方法或者toString()方法來轉換成能夠操做的數據類型。javascript

一元操做符

  • 遞增操做符 ++java

  • 遞減操做符 --express

  • 正數 +函數

  • 負數 -性能

遞增和遞減操做符遵循的規則.
1.在應用於包含有效數字的字符串時,先將其轉換爲數字值,再執行加減1的操做。字符串變量變成數值變量
2.在應用於一個不包含有效數字字符的字符串時,將變量的值設置爲NaN。字符串變量變成數值變量
3.在應用於布爾值false/true時,先將其轉換爲0再執行加減1的操做。布爾值變量變爲數值變量
4.在應用於浮點數值時,執行加減1的操做。
5.在應用於對象時,先調用對象的valueOf()方法以取得一個可供操做的值,而後對該值應用前面的四條規則。若是結果是NaN,則在調用toSring()方法後再應用前面的規則。對象變量變成數值變量學習

var num = 1;
++num;    //2

var num ='12s';
++num;    //NaN
typeof num;    //number

var num = false;
++num;    //1
typeof num;    //number

位操做符

位操做符用於最基本的層次上,咱們通常比較少用到。ECMAscript中全部數值都以IEEE-754 64位格式存儲,可是位操做符並不直接操做64位的值,而是先將64位轉換成32位的整數,而後執行操做,最後將結果轉換回64位。這會帶來一個嚴重的副效應,即在對特殊的NaN和Infinity值應用位操做時,兩個值都會被當作0來處理。測試

  • 按位非 ~spa

  • 按位與 &code

  • 按位或 |對象

  • 按位異或 ^

  • 左移 <<

  • 有符號右移 >>

  • 無符號右移 >>>

布爾操做

布爾操做的重要性不言而喻。布爾操做用來測試兩個值的關係,若是沒有它們,那麼如if...else這類的判斷語句也就無用武之地了。

  • 邏輯非 !

  • 邏輯與 &&

  • 邏輯或 ||

邏輯非(!)

只操做1個操做數,不管操做數是什麼數據類型,都返回一個布爾值。邏輯非操做不會改變操做數的數據類型。
邏輯非(!)操做符的規則:
1.若是操做數是一個對象,則返回false。
2.日字旁操做數是一個空字符串,則返回true。
3.若是操做數是一個非空字符串,則返回false。
4.若是操做數值是0,則返回true。
5.若是操做數是任意非0數值(包括Infinity),返回false。
6.若是操做數是null,返回true。
7.若是操做數是NaN,返回true。
8.若是操做數是undefined,返回true。

邏輯與(&&)

邏輯與有兩個操做數,它能夠應用於任何類型的操做數,而不單單是布爾值。在有一個操做數不是布爾值的狀況下,邏輯與操做就不必定返回布爾值。
邏輯與(&&)操做符的規則
1.若是第一個操做數是對象,則返回第二個操做數。
2.若是第二個操做數是對象,則只有在第一個操做數的求值結果爲true時才返回這個對象。
3.若是兩個操做數都是對象,則返回第二個操做數。
4.若是有一個操做數時null,則返回null。
5.若是有一個操做數時undefined,則返回undefined。
可見邏輯與是一種短路操做,若是第一個操做數可以決定結果(如null,undefined),那麼就不會對第二個操做數求值。

var a = {};
var b;
a && b;  //undefined

var a = 3;
var b = {};
a && b;  //b

var a = null;
var b = {};
a && b;  //null

邏輯或(||)

邏輯或的操做數有兩個,若是其中有一個操做數不是布爾值,邏輯或也不必定返回布爾值,它遵循的規則以下:
1.若是第一個操做數是對象,則返回第一個操做數;
2.若是第一個操做數求值結果爲false,則返回第二個操做數;
3.若是兩個操做數都爲對象,則返回第一個操做數;
4.若是兩個操做數都是null,則返回null;
5.若是兩個操做數都是NaN,則返回NaN;
6.若是連個操做數都是undefined,則返回undefined。
可見邏輯或也是一種短路語句,若是第一個操做數的求值結果爲true則不會對第二個操做數進行求值。
注意:由以上規則可知,邏輯操做符均不會改變操做數的數據類型。
利用邏輯與來避免爲變量賦null或者undefined的值,以下:

var myObject = preferObject || backupObject;

乘性操做符

乘性操做符和其餘語言中的乘性操做符用法相似,只不過在操做數爲非數值的狀況下會執行自動的類型轉換。即參與乘性計算的某個操做數不是數值,會先使用Number()轉型函數將其轉換爲數值可是乘性操做不會改變操做數數值類型。

  • 乘法(*)

  • 除法(/)

  • 求模(%)

var a = 1;
var b = false;
a*b; //0
typeof b;  //boolean

加性操做符

加性操做符在操做數都爲數值的時候執行常規的加減法操做,在爲非數值時會有特殊的轉化規則。可是同乘性操做符同樣加性操做符不會改變數值類型。

  • 加法(+)

  • 減法(-)

加性操做符

加性操做符在有操做數爲字符串時遵循如下規則:
1.若是兩個操做數都爲字符,則將第二個操做數與第一個操做數拼接起來;
2.若是隻有一個操做數是字符串,則將另外一個操做數轉換爲字符串,而後將兩個字符串拼接起來;

減性操做符

1.若是有一個操做數是字符串,布爾值、null或者undefined,則先調用Number()方法,而後再根據數值減法規則執行減法計算。
2.若是有一個操做數是對象,則調用對象的valueOf()方法取得該對象的數值。若是對象沒有valueOf()方法方法,則調用tostring()方法並將獲得的字符串轉換爲數值。

關係操做符

  • 小於(<)

  • 大於(>)

  • 小於等於(<=)

  • 大於等於(>=)

相等操做符

  • 相等(==)

  • 不相等(!=)

  • 全等(===)

  • 不全等(!==)

相等和不相等

這組操做符是先轉換再比較,即操做符會改變操做數的數值類型
1.若是有一個操做數是布爾值,則在比較以前會轉換爲數值;
2.一個操做數是字符,另外一個是數值,那麼在比較相等性以前會將字符串轉換爲數值再進行比較;
3.若是一個操做符是對象,另外一個不是,則調用valueOf()方法,將獲得的結果進行比較。
4.若是兩個都是對象,則比較是不是同一個對象,若是兩個操做數都指向同一個對象,那麼認爲它們相等。

var a = '3';
var b = 3;
a == b;  //true
typeof a;  //number

var a = {};
var b = {};
a == b;  //false

var a = {};
var b = a;
var c = a;
b == c;  //true

全等和不全等

全等和不全等操做符不會改變操做數的數值類型。

條件操做符

value = boolean_expression ? true_value : false_value

條件操做符會根據boolean_expression的求值結果來決定給變量value賦哪一個值,求值爲真是賦true_value值,爲假時賦false_value值。

賦值操做符

  • 賦值(=)

  • 乘/賦值(*=)

  • 初/賦值(/=)

  • 模/賦值(%=)

  • 加/賦值(+=)

  • 減/賦值(-=)

  • 左移/賦值(<<=)

  • 無符號右移/賦值(>>>=)

  • 有符號右移/賦值(>>=)

逗號操做符

逗號操做符用於在一條語句中執行多個操做。

var num1=1, num2=2, num3=3;

操做符優先級

優先級

相關文章
相關標籤/搜索