溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ECMAScript中都有哪些操作符

發(fā)布時間:2021-07-09 11:20:25 來源:億速云 閱讀:169 作者:chen 欄目:開發(fā)技術(shù)

這篇文章主要講解了“ECMAScript中都有哪些操作符”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“ECMAScript中都有哪些操作符”吧!

目錄
  • 一元操作符

  • 布爾操作符

  • 乘性操作符

  • 加性操作符

  • 關(guān)系操作符

  • 相等操作符

  • 條件操作符

  • 賦值操作符

  • 逗號操作符


一元操作符

只能操作一個值的操作符叫做一元操作符

遞增和遞減。遞增和遞減操作符借鑒自C,而且有兩個版本:前置型和后置型

  • 前置型:操作符位于要操作的變量之前。執(zhí)行前置型遞增和遞減操作時,變量的值都是在語句被求值以前改變的

var age = 29;
var anotherAge = --age + 2
console.log(age) // 28
console.log(anotherAge) // 30

后置型:操作符位于要操作的變量之后。后置型遞增和遞減操作是在包含它們的語句被求值之后才執(zhí)行的

var num1 - 2;
var num2 = 20
var num3 = num1-- + num2; // 22
var num4 = num1 + num2; // 21

以上4個操作符對任何值都適用,即可以用于字符串、布爾值、浮點數(shù)值和對象。遵循下列規(guī)則:

  • 在應(yīng)用于一個包含有效數(shù)字字符的字符串時,先將其轉(zhuǎn)換為數(shù)字值,再執(zhí)行加減1的操作。字符串變量變成數(shù)值變量

  • 在應(yīng)用于一個不包含有數(shù)字字符的字符串時,將變量的值設(shè)置為NaN。字符串變量變成數(shù)值變量

  • 在應(yīng)用于布爾值false時,先將其轉(zhuǎn)換為0再執(zhí)行加減1的操作。布爾值變量變成數(shù)值變量

  • 在應(yīng)用于布爾值true時,先將其轉(zhuǎn)換為0再執(zhí)行加減1的操作。布爾值變量變成數(shù)值變量

  • 在應(yīng)用于浮點數(shù)值時,執(zhí)行加減1的操作

  • 在應(yīng)用于對象時,先調(diào)用對象的valueOf()方法以取得一個可供操作的值,然后對該值應(yīng)用上述規(guī)則。如果是NaN,則調(diào)用toString()方法后再應(yīng)用上述規(guī)則。對象變量變成數(shù)值變量

上述規(guī)則驗證:

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

一元加和減操作符

一元加和減操作符主要用于基本的算術(shù)運算,也可以用于轉(zhuǎn)換數(shù)據(jù)類型,即在對非數(shù)值應(yīng)用一元操作符時,該操作符會像Number()轉(zhuǎn)型函數(shù)一樣對這個值執(zhí)行轉(zhuǎn)換。布爾值false和true將被轉(zhuǎn)換為0和1,字符串值會被按照一組特殊的規(guī)則進行解析,對象是先調(diào)用它們的valueOf()或toString()方法,再轉(zhuǎn)換得到的值。以一元加操作符為例:

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中的任何值。無論操作數(shù)是個什么數(shù)據(jù)類型,這個操作符都會返回一個布爾值。邏輯非操作符首先會將它的操作數(shù)轉(zhuǎn)換為一個布爾值,然后對其求反。遵循一下規(guī)則

  • 如果操作數(shù)是一個對象,返回false

  • 如果操作數(shù)是一個空字符串,返回true

  • 如果操作數(shù)是一個非空字符串,返回false

  • 如果操作數(shù)是數(shù)值0,返回true

  • 如果操作數(shù)是任意非0數(shù)值(包括Infinity),返回false

  • 如果操作數(shù)是null,返回true

  • 如果操作數(shù)是NaN,返回true

  • 如果操作數(shù)是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、邏輯與。操作符由兩個和號(&&)表示,有兩個操作數(shù)。邏輯與操作可以應(yīng)用與任何類型的操作數(shù),而不僅僅是布爾值。在有一個操作數(shù)不是布爾值的情況下,邏輯與操作就不一定返回布爾值;此時,它遵循以下規(guī)則:

  • 如果第一個操作數(shù)是對象,則返回第二個操作數(shù)

  • 如果第二個操作數(shù)是對象,則只有在第一個操作數(shù)的求值結(jié)果為true的情況下才會返回該對象

  • 如果兩個操作數(shù)都是對象,則返回第二個操作數(shù)

  • 如果第一個操作數(shù)是null,則返回null

  • 如果第一個操作數(shù)是NaN,則返回NaN

  • 如果第一個操作數(shù)是undefined,則返回undefined

邏輯與操作屬于短路操作,即如果第一個操作數(shù)能夠決定結(jié)果,那么就不會再對第二個操作數(shù)求值

3、邏輯或。操作符由兩個豎線符號(||)表示,有兩個操作數(shù)。與邏輯與操作相似,如果有一個操作數(shù)不是布爾值,邏輯或也不一定返回布爾值;此時,它遵循以下規(guī)則:

  • 如果第一個操作數(shù)是對象,則返回第一個操作數(shù)

  • 如果第一個操作數(shù)的求值結(jié)果為false,則返回第二個操作數(shù)

  • 如果兩個操作數(shù)都是對象,則返回第一個操作數(shù)

  • 如果兩個操作數(shù)都是null,則返回null

  • 如果兩個操作數(shù)都是NaN,則返回NaN

  • 如果兩個操作數(shù)都是undefined,則返回undefined

與邏輯與操作符相似,邏輯或操作符也是短路操作。也就是說,如果第一個操作數(shù)的求值結(jié)果為true,就不會對第二個操作數(shù)求值了

乘性操作符

ECMAScript定義了3個乘性操作符:乘法、除法和求模。如果參與乘性計算的某個操作數(shù)不是數(shù)值,后臺會先使用Number()轉(zhuǎn)型函數(shù)將其轉(zhuǎn)換為數(shù)值,如:空字符串將被當(dāng)作0,布爾值true將被當(dāng)作1

1、乘法。操作符由一個星號(*)表示,用于計算兩個數(shù)值的乘積。在處理特殊值情況下,乘法操作符遵循下列特殊的規(guī)則:

  • 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)的乘法計算,即兩個正數(shù)或兩個負數(shù)相乘的結(jié)果還是正數(shù),而如果只有一個操作數(shù)有符號那么結(jié)果就是負數(shù)。如果乘積超過了ECMAScript數(shù)值的表示范圍,則返回Infinity或-Infinity

  • 如果有一個操作數(shù)是NaN,則結(jié)果是NaN

  • 如果是Infinity與0相乘,則結(jié)果是NaN

  • 如果是Infinity與非0數(shù)值相乘,則結(jié)果是Infinity或-Infinity,取決于有符號操作數(shù)的符號

  • 如果是Infinity與Infinity相乘,則結(jié)果是Infinity

  • 如果有一個操作數(shù)不是數(shù)值,則在后臺調(diào)用Number()將其轉(zhuǎn)換為數(shù)值,然后在應(yīng)用上面的規(guī)則

2、除法。操作符由一個斜線符號(/)表示,執(zhí)行第二個操作數(shù)除第一個操作數(shù)的計算。遵循一下規(guī)則:

  • 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)的除法計算,即兩個正數(shù)或兩個負數(shù)相除結(jié)果還是正數(shù);如果只有一個操作數(shù)有符號,那么結(jié)果就是負數(shù)。如果超過了ECMAScript數(shù)值的表示范圍,則返回Infinity或-Infinity

  • 如果有一個操作數(shù)是NaN,則結(jié)果是NaN

  • 如果是Infinity被Infinity除,則結(jié)果是NaN

  • 如果是0被0除,則結(jié)果是NaN

  • 如果是非零的有限數(shù)被零除,則結(jié)果是Infinity或-Infinity,取決于有符號操作數(shù)的符號

  • 如果是Infinity被任何非零數(shù)值除,則結(jié)果是Infinity或-Infinity,取決于有符號操作數(shù)的符號

  • 如果有一個操作數(shù)不是數(shù)值,則在后臺調(diào)用Number()將其轉(zhuǎn)換為數(shù)值,然后再應(yīng)用上面的規(guī)則

3、求模(余數(shù))。操作符由一個百分號(%)表示。遵循以下規(guī)則:

  • 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)的除法計算,返回除得的余數(shù)

  • 如果被除數(shù)是無窮大值而除數(shù)是有限大的數(shù)值,則結(jié)果是NaN

  • 如果被除數(shù)是有限大的數(shù)值而除數(shù)是零,則結(jié)果是NaN

  • 如果是Infinity被Infinity除,則結(jié)果是NaN

  • 如果被除數(shù)是有限大的數(shù)值而除數(shù)是無窮大的數(shù)值,則結(jié)果是被除數(shù)

  • 如果被除數(shù)是零,則結(jié)果是零

  • 如果有一個操作數(shù)不是數(shù)值,則在后臺調(diào)用Number()將其轉(zhuǎn)換為數(shù)值,然后在應(yīng)用上面規(guī)則

加性操作符

與乘性操作符類似,加性操作符也會在后臺轉(zhuǎn)換不同的數(shù)據(jù)類型。

1、加法。加法操作符由加號(+)表示。如果兩個操作數(shù)都是數(shù)值,執(zhí)行常規(guī)的加法計算,然后根據(jù)下列規(guī)則返回結(jié)果:

  • 如果有一個操作數(shù)是NaN,則結(jié)果是NaN

  • 如果是Infinity加Infinity,則結(jié)果是Infinity

  • 如果是-Infinity加-Infinity,則結(jié)果是-Infinity

  • 如果是Infinity加-Infinity,則結(jié)果是NaN

  • 如果是+0加+0,則結(jié)果是+0

  • 如果是-0加-0,則結(jié)果是-0

  • 如果是+0加-0,則結(jié)果是0

如果有一個操作數(shù)是字符串,那么就要應(yīng)用如下規(guī)則:

  • 如果兩個操作數(shù)都是字符串,則將第二個操作數(shù)與第一個操作數(shù)拼接起來

  • 如果只有一個操作數(shù)是字符串,則將另一個操作數(shù)轉(zhuǎn)換為字符串,然后再將兩個字符串拼接起來

  • 如果有一個操作數(shù)是對象、數(shù)值或布爾值,則調(diào)用它們的toString()方法取得相應(yīng)的字符串值,然后再應(yīng)用前面關(guān)于字符串的規(guī)則

  • 如果是undefined和null,則分別調(diào)用String()函數(shù)并取得字符串"undefined"和"null"

2、減法。減法操作符由減號(-)表示,與加法操作符類似,遵循以下規(guī)則:

  • 如果兩個操作符都是數(shù)值,則執(zhí)行常規(guī)的算術(shù)減法操作并返回結(jié)果

  • 如果有一個操作數(shù)是NaN,則結(jié)果是NaN

  • 如果是Infinity減Infinity,則結(jié)果是NaN

  • 如果是-Infinity減-Infinity,則結(jié)果是NaN

  • 如果是Infinity減-Infinity,則結(jié)果是Infinity

  • 如果是-Infinity將Infinity,則結(jié)果是-Infinity

  • 如果是+0減+0,則結(jié)果是+0

  • 如果是-0減+0,則結(jié)果是-0

  • 如果是-0減-0,則結(jié)果是+0

  • 如果有一個操作數(shù)是字符串、布爾值、null或undefined,則現(xiàn)在后臺調(diào)用Number()函數(shù)將其轉(zhuǎn)換為數(shù)值,然后再根據(jù)前面的規(guī)則執(zhí)行減法計算。如果轉(zhuǎn)換結(jié)果是NaN,則減法的結(jié)果就是NaN

  • 如果有一個操作數(shù)是對象,則調(diào)用對象的valueOf()方法以取得表示該對象的數(shù)值。如果得到的值是NaN,則減法結(jié)果就是NaN。如果對象沒有valueOf()方法,則調(diào)用其toString()方法并將得到的字符串轉(zhuǎn)換為數(shù)值

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被轉(zhuǎn)換為1
console.log(result2) // NaN
console.log(result3) // 2
console.log(result4) // 5, 空字符串被轉(zhuǎn)換為0
console.log(result5) // 3,字符串2被轉(zhuǎn)換為數(shù)字2
console.log(result6) // 5,因為null被轉(zhuǎn)換為了0

關(guān)系操作符

關(guān)系操作符有小于(<)、大于(>)、小于等于(<=)和大于等于(>=)四個關(guān)系比較。當(dāng)關(guān)系操作符的操作數(shù)使用了非數(shù)值時,也要進行數(shù)據(jù)轉(zhuǎn)換或完成某些奇怪的操作。相應(yīng)規(guī)則如下:

  • 如果兩個操作數(shù)都是數(shù)值,則執(zhí)行數(shù)值比較

  • 如果兩個操作數(shù)都是字符串,則比較兩個字符串對應(yīng)的字符編碼值

  • 如果一個操作數(shù)是數(shù)值,則將另一個操作數(shù)轉(zhuǎn)換為一個數(shù)值,然后執(zhí)行數(shù)值比較

  • 如果一個操作數(shù)是對象,則調(diào)用這個對象的valueOf()方法,用得到的結(jié)果按照前面的的規(guī)則進行比較。如果對象沒有valueOf()方法,則調(diào)用toString()方法,并用得到的結(jié)果根據(jù)前面的規(guī)則執(zhí)行比較

  • 如果一個操作數(shù)是布爾值,則先將其轉(zhuǎn)換為數(shù)值,然后再執(zhí)行比較

在比較字符串時,實際比較的是兩個字符串中對應(yīng)位置的每個字符的字符編碼值。經(jīng)過這么一番比較之后,再返回一個布爾值。大寫字母的字符編碼小于小寫字母的字符編碼。

相等操作符

兩組操作符:相等和不相等——先轉(zhuǎn)換再比較;全等和不全等——僅比較而不轉(zhuǎn)換

1、相等和不相等。相等操作符由兩個等于號(==)表示,如果兩個操作數(shù)相等,則返回true;不相等操作符由嘆號后跟等于號(!=)表示,如果兩個操作數(shù)不相等,則返回true。這兩個操作符都會先轉(zhuǎn)換操作數(shù)(通常稱為強制轉(zhuǎn)型),然后再比較它們的相等性。在轉(zhuǎn)換不同數(shù)據(jù)類型時,遵循以下基本規(guī)則:

  • 如果一個操作數(shù)是布爾值,則在比較相等性之前先將其轉(zhuǎn)換為數(shù)值——false轉(zhuǎn)換為0,true轉(zhuǎn)換為1

  • 如果一個操作數(shù)是字符串,另一個操作數(shù)是數(shù)值,在比較相等性之前先將字符串轉(zhuǎn)換為數(shù)值

  • 如果一個操作數(shù)是對象,另一個操作數(shù)不是,則調(diào)用對象的valueOf()方法,用得到的基本類型值按照前面的規(guī)則進行比較

這兩個操作符在進行比較時要遵循下列規(guī)則

  • null和undefined事相等的

  • 比較相等性之前,不能將null和undefined轉(zhuǎn)換成其他任何值

  • 如果有一個操作數(shù)是NaN,則相等操作符返回false,而不相等操作符返回true。即使兩個操作數(shù)都是NaN,則相等操作符也返回false;因為按照規(guī)則,NaN不等于NaN

  • 如果兩個操作數(shù)都是對象,則比較它們是不是同一個對象。如果兩個操作數(shù)都指向同一個對象,則相等操作符返回true;否則,返回false

2、全等和不全等。全等操作符由3個等于號(===)表示,它只在兩個操作數(shù)未經(jīng)轉(zhuǎn)換就相等的情況下返回true。不全等操作符有一個嘆號后跟兩個等于號(!==)表示,它在兩個操作數(shù)未經(jīng)轉(zhuǎn)換就不相等的情況下返回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(關(guān)系表達式返回true),則將num1的值賦給max;如果num1小于或等于num2(關(guān)系表達式返回false),則將num2的值賦給max

賦值操作符

賦值操作符由等于號(=)表示,其作用就是把右側(cè)的值賦給左側(cè)的變量。如果在等號前面再添加乘性操作符、加性操作符或位操作符,就可以完成復(fù)合賦值操作。每個主要的算術(shù)操作符(以及個別的其他操作符)都有對應(yīng)的復(fù)合賦值操作符。這些操作符如下所示:

  • 乘/賦值——*=

  • 除/賦值——/=

  • 模/賦值——%=

  • 加/賦值——+=

  • 減/賦值——-=

  • 左移/賦值——<<=

  • 有符號右移/賦值——>>=

  • 無符號右移/賦值——>>>=

逗號操作符

逗號操作符可以在一條語句中執(zhí)行多個操作,如:var num1=1, num2=2, num3=3; 。

逗號操作符還可以用于賦值,在用于賦值時,逗號操作符總會返回表達式中的最后一項。如:var num= (5, 6, 1, 4, 7, 0); // num值為0

感謝各位的閱讀,以上就是“ECMAScript中都有哪些操作符”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對ECMAScript中都有哪些操作符這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI