您好,登錄后才能下訂單哦!
這篇文章主要講解了“ECMAScript中都有哪些操作符”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“ECMAScript中都有哪些操作符”吧!
一元操作符
布爾操作符
乘性操作符
加性操作符
關系操作符
相等操作符
條件操作符
賦值操作符
逗號操作符
只能操作一個值的操作符叫做一元操作符
遞增和遞減。遞增和遞減操作符借鑒自C,而且有兩個版本:前置型和后置型
前置型:操作符位于要操作的變量之前。執行前置型遞增和遞減操作時,變量的值都是在語句被求值以前改變的
var age = 29; var anotherAge = --age + 2 console.log(age) // 28 console.log(anotherAge) // 30
后置型:操作符位于要操作的變量之后。后置型遞增和遞減操作是在包含它們的語句被求值之后才執行的
var num1 - 2; var num2 = 20 var num3 = num1-- + num2; // 22 var num4 = num1 + num2; // 21
以上4個操作符對任何值都適用,即可以用于字符串、布爾值、浮點數值和對象。遵循下列規則:
在應用于一個包含有效數字字符的字符串時,先將其轉換為數字值,再執行加減1的操作。字符串變量變成數值變量
在應用于一個不包含有數字字符的字符串時,將變量的值設置為NaN。字符串變量變成數值變量
在應用于布爾值false時,先將其轉換為0再執行加減1的操作。布爾值變量變成數值變量
在應用于布爾值true時,先將其轉換為0再執行加減1的操作。布爾值變量變成數值變量
在應用于浮點數值時,執行加減1的操作
在應用于對象時,先調用對象的valueOf()方法以取得一個可供操作的值,然后對該值應用上述規則。如果是NaN,則調用toString()方法后再應用上述規則。對象變量變成數值變量
上述規則驗證:
var s1 = "2"; var s2 = "z"; var b = false; var f = 1.1; var o = { valueOf: function () { return -1 } } console.log(s1++); // 2 console.log(s1); // 3 console.log(s2++); // NaN console.log(s2); // NaN console.log(b++); // 0 console.log(b); // 1 console.log(f--); // 1.1 console.log(f); // 0.1000000000000009 console.log(o--); // -1 console.log(o); // -2
一元加和減操作符
一元加和減操作符主要用于基本的算術運算,也可以用于轉換數據類型,即在對非數值應用一元操作符時,該操作符會像Number()轉型函數一樣對這個值執行轉換。布爾值false和true將被轉換為0和1,字符串值會被按照一組特殊的規則進行解析,對象是先調用它們的valueOf()或toString()方法,再轉換得到的值。以一元加操作符為例:
var s1 = "01"; var s2 = "1.1"; var s3 = "z"; var b = false; var f = 1.1; var o = { valueOf: function () { return -1 } } s1 = +s1 s2 = +s2 s3 = +s3 b = +b f = +f o = +o console.log(s1) // 1 console.log(s2) // 1.1 console.log(s3) // NaN console.log(b) // 0 console.log(f) // 1.1 console.log(o) // -1
布爾操作符一共有3個:非(NOT)、與(AND)和或(OR)
1、邏輯非。由一個英文嘆號(!)表示,可以用于ECMAScript中的任何值。無論操作數是個什么數據類型,這個操作符都會返回一個布爾值。邏輯非操作符首先會將它的操作數轉換為一個布爾值,然后對其求反。遵循一下規則
如果操作數是一個對象,返回false
如果操作數是一個空字符串,返回true
如果操作數是一個非空字符串,返回false
如果操作數是數值0,返回true
如果操作數是任意非0數值(包括Infinity),返回false
如果操作數是null,返回true
如果操作數是NaN,返回true
如果操作數是undefined,返回true
console.log(!false); // true console.log(!"blue"); // false console.log(!""); // true console.log(!0); // true console.log(!undefined); // true console.log(!null); // true console.log(!NaN); // true console.log(!12345); false
2、邏輯與。操作符由兩個和號(&&)表示,有兩個操作數。邏輯與操作可以應用與任何類型的操作數,而不僅僅是布爾值。在有一個操作數不是布爾值的情況下,邏輯與操作就不一定返回布爾值;此時,它遵循以下規則:
如果第一個操作數是對象,則返回第二個操作數
如果第二個操作數是對象,則只有在第一個操作數的求值結果為true的情況下才會返回該對象
如果兩個操作數都是對象,則返回第二個操作數
如果第一個操作數是null,則返回null
如果第一個操作數是NaN,則返回NaN
如果第一個操作數是undefined,則返回undefined
邏輯與操作屬于短路操作,即如果第一個操作數能夠決定結果,那么就不會再對第二個操作數求值
3、邏輯或。操作符由兩個豎線符號(||)表示,有兩個操作數。與邏輯與操作相似,如果有一個操作數不是布爾值,邏輯或也不一定返回布爾值;此時,它遵循以下規則:
如果第一個操作數是對象,則返回第一個操作數
如果第一個操作數的求值結果為false,則返回第二個操作數
如果兩個操作數都是對象,則返回第一個操作數
如果兩個操作數都是null,則返回null
如果兩個操作數都是NaN,則返回NaN
如果兩個操作數都是undefined,則返回undefined
與邏輯與操作符相似,邏輯或操作符也是短路操作。也就是說,如果第一個操作數的求值結果為true,就不會對第二個操作數求值了
ECMAScript定義了3個乘性操作符:乘法、除法和求模。如果參與乘性計算的某個操作數不是數值,后臺會先使用Number()轉型函數將其轉換為數值,如:空字符串將被當作0,布爾值true將被當作1
1、乘法。操作符由一個星號(*)表示,用于計算兩個數值的乘積。在處理特殊值情況下,乘法操作符遵循下列特殊的規則:
如果操作數都是數值,執行常規的乘法計算,即兩個正數或兩個負數相乘的結果還是正數,而如果只有一個操作數有符號那么結果就是負數。如果乘積超過了ECMAScript數值的表示范圍,則返回Infinity或-Infinity
如果有一個操作數是NaN,則結果是NaN
如果是Infinity與0相乘,則結果是NaN
如果是Infinity與非0數值相乘,則結果是Infinity或-Infinity,取決于有符號操作數的符號
如果是Infinity與Infinity相乘,則結果是Infinity
如果有一個操作數不是數值,則在后臺調用Number()將其轉換為數值,然后在應用上面的規則
2、除法。操作符由一個斜線符號(/)表示,執行第二個操作數除第一個操作數的計算。遵循一下規則:
如果操作數都是數值,執行常規的除法計算,即兩個正數或兩個負數相除結果還是正數;如果只有一個操作數有符號,那么結果就是負數。如果超過了ECMAScript數值的表示范圍,則返回Infinity或-Infinity
如果有一個操作數是NaN,則結果是NaN
如果是Infinity被Infinity除,則結果是NaN
如果是0被0除,則結果是NaN
如果是非零的有限數被零除,則結果是Infinity或-Infinity,取決于有符號操作數的符號
如果是Infinity被任何非零數值除,則結果是Infinity或-Infinity,取決于有符號操作數的符號
如果有一個操作數不是數值,則在后臺調用Number()將其轉換為數值,然后再應用上面的規則
3、求模(余數)。操作符由一個百分號(%)表示。遵循以下規則:
如果操作數都是數值,執行常規的除法計算,返回除得的余數
如果被除數是無窮大值而除數是有限大的數值,則結果是NaN
如果被除數是有限大的數值而除數是零,則結果是NaN
如果是Infinity被Infinity除,則結果是NaN
如果被除數是有限大的數值而除數是無窮大的數值,則結果是被除數
如果被除數是零,則結果是零
如果有一個操作數不是數值,則在后臺調用Number()將其轉換為數值,然后在應用上面規則
與乘性操作符類似,加性操作符也會在后臺轉換不同的數據類型。
1、加法。加法操作符由加號(+)表示。如果兩個操作數都是數值,執行常規的加法計算,然后根據下列規則返回結果:
如果有一個操作數是NaN,則結果是NaN
如果是Infinity加Infinity,則結果是Infinity
如果是-Infinity加-Infinity,則結果是-Infinity
如果是Infinity加-Infinity,則結果是NaN
如果是+0加+0,則結果是+0
如果是-0加-0,則結果是-0
如果是+0加-0,則結果是0
如果有一個操作數是字符串,那么就要應用如下規則:
如果兩個操作數都是字符串,則將第二個操作數與第一個操作數拼接起來
如果只有一個操作數是字符串,則將另一個操作數轉換為字符串,然后再將兩個字符串拼接起來
如果有一個操作數是對象、數值或布爾值,則調用它們的toString()方法取得相應的字符串值,然后再應用前面關于字符串的規則
如果是undefined和null,則分別調用String()函數并取得字符串"undefined"和"null"
2、減法。減法操作符由減號(-)表示,與加法操作符類似,遵循以下規則:
如果兩個操作符都是數值,則執行常規的算術減法操作并返回結果
如果有一個操作數是NaN,則結果是NaN
如果是Infinity減Infinity,則結果是NaN
如果是-Infinity減-Infinity,則結果是NaN
如果是Infinity減-Infinity,則結果是Infinity
如果是-Infinity將Infinity,則結果是-Infinity
如果是+0減+0,則結果是+0
如果是-0減+0,則結果是-0
如果是-0減-0,則結果是+0
如果有一個操作數是字符串、布爾值、null或undefined,則現在后臺調用Number()函數將其轉換為數值,然后再根據前面的規則執行減法計算。如果轉換結果是NaN,則減法的結果就是NaN
如果有一個操作數是對象,則調用對象的valueOf()方法以取得表示該對象的數值。如果得到的值是NaN,則減法結果就是NaN。如果對象沒有valueOf()方法,則調用其toString()方法并將得到的字符串轉換為數值
var result1 = 5 - true var result2 = NaN - 1 var result3 = 5 - 3 var result4 = 5 - "" var result5 = 5 - "2" var result6 = 5 - null console.log(result1) // 4, true被轉換為1 console.log(result2) // NaN console.log(result3) // 2 console.log(result4) // 5, 空字符串被轉換為0 console.log(result5) // 3,字符串2被轉換為數字2 console.log(result6) // 5,因為null被轉換為了0
關系操作符有小于(<)、大于(>)、小于等于(<=)和大于等于(>=)四個關系比較。當關系操作符的操作數使用了非數值時,也要進行數據轉換或完成某些奇怪的操作。相應規則如下:
如果兩個操作數都是數值,則執行數值比較
如果兩個操作數都是字符串,則比較兩個字符串對應的字符編碼值
如果一個操作數是數值,則將另一個操作數轉換為一個數值,然后執行數值比較
如果一個操作數是對象,則調用這個對象的valueOf()方法,用得到的結果按照前面的的規則進行比較。如果對象沒有valueOf()方法,則調用toString()方法,并用得到的結果根據前面的規則執行比較
如果一個操作數是布爾值,則先將其轉換為數值,然后再執行比較
在比較字符串時,實際比較的是兩個字符串中對應位置的每個字符的字符編碼值。經過這么一番比較之后,再返回一個布爾值。大寫字母的字符編碼小于小寫字母的字符編碼。
兩組操作符:相等和不相等——先轉換再比較;全等和不全等——僅比較而不轉換
1、相等和不相等。相等操作符由兩個等于號(==)表示,如果兩個操作數相等,則返回true;不相等操作符由嘆號后跟等于號(!=)表示,如果兩個操作數不相等,則返回true。這兩個操作符都會先轉換操作數(通常稱為強制轉型),然后再比較它們的相等性。在轉換不同數據類型時,遵循以下基本規則:
如果一個操作數是布爾值,則在比較相等性之前先將其轉換為數值——false轉換為0,true轉換為1
如果一個操作數是字符串,另一個操作數是數值,在比較相等性之前先將字符串轉換為數值
如果一個操作數是對象,另一個操作數不是,則調用對象的valueOf()方法,用得到的基本類型值按照前面的規則進行比較
這兩個操作符在進行比較時要遵循下列規則
null和undefined事相等的
比較相等性之前,不能將null和undefined轉換成其他任何值
如果有一個操作數是NaN,則相等操作符返回false,而不相等操作符返回true。即使兩個操作數都是NaN,則相等操作符也返回false;因為按照規則,NaN不等于NaN
如果兩個操作數都是對象,則比較它們是不是同一個對象。如果兩個操作數都指向同一個對象,則相等操作符返回true;否則,返回false
2、全等和不全等。全等操作符由3個等于號(===)表示,它只在兩個操作數未經轉換就相等的情況下返回true。不全等操作符有一個嘆號后跟兩個等于號(!==)表示,它在兩個操作數未經轉換就不相等的情況下返回true。
var result1 = ("55" == 55) var result2 = ("55" === 55) var result3 = ("55" != 55) var result4 = ("55" !== 55) console.log(result1) // true console.log(result2) // false console.log(result3) // false console.log(result4) // true
語法:var max = (num1 > num2) ? num1 : num2
以上例子中,max中將會保存一個最大的值,表達式的意思是:如果num1大于num2(關系表達式返回true),則將num1的值賦給max;如果num1小于或等于num2(關系表達式返回false),則將num2的值賦給max
賦值操作符由等于號(=)表示,其作用就是把右側的值賦給左側的變量。如果在等號前面再添加乘性操作符、加性操作符或位操作符,就可以完成復合賦值操作。每個主要的算術操作符(以及個別的其他操作符)都有對應的復合賦值操作符。這些操作符如下所示:
乘/賦值——*=
除/賦值——/=
模/賦值——%=
加/賦值——+=
減/賦值——-=
左移/賦值——<<=
有符號右移/賦值——>>=
無符號右移/賦值——>>>=
逗號操作符可以在一條語句中執行多個操作,如:var num1=1, num2=2, num3=3;
。
逗號操作符還可以用于賦值,在用于賦值時,逗號操作符總會返回表達式中的最后一項。如:var num= (5, 6, 1, 4, 7, 0); // num值為0
感謝各位的閱讀,以上就是“ECMAScript中都有哪些操作符”的內容了,經過本文的學習后,相信大家對ECMAScript中都有哪些操作符這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。