国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

一篇文章弄懂ECMAScript中的操作符

發(fā)布時(shí)間:2021-08-17 12:16 來(lái)源: 閱讀:0 作者:罄竹 欄目: JavaScript 歡迎投稿:712375056

目錄

一元操作符

只能操作一個(gè)值的操作符叫做一元操作符

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

  • 前置型:操作符位于要操作的變量之前。執行前置型遞增和遞減操作時(shí),變量的值都是在語(yǔ)句被求值以前改變的
var age = 29;
var anotherAge = --age + 2
console.log(age) // 28
console.log(anotherAge) // 30

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

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

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

  • 在應用于一個(gè)包含有效數字字符的字符串時(shí),先將其轉換為數字值,再執行加減1的操作。字符串變量變成數值變量
  • 在應用于一個(gè)不包含有數字字符的字符串時(shí),將變量的值設置為NaN。字符串變量變成數值變量
  • 在應用于布爾值false時(shí),先將其轉換為0再執行加減1的操作。布爾值變量變成數值變量
  • 在應用于布爾值true時(shí),先將其轉換為0再執行加減1的操作。布爾值變量變成數值變量
  • 在應用于浮點(diǎn)數值時(shí),執行加減1的操作
  • 在應用于對象時(shí),先調用對象的valueOf()方法以取得一個(gè)可供操作的值,然后對該值應用上述規則。如果是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

一元加和減操作符

一元加和減操作符主要用于基本的算術(shù)運算,也可以用于轉換數據類(lèi)型,即在對非數值應用一元操作符時(shí),該操作符會(huì )像Number()轉型函數一樣對這個(gè)值執行轉換。布爾值false和true將被轉換為0和1,字符串值會(huì )被按照一組特殊的規則進(jìn)行解析,對象是先調用它們的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個(gè):非(NOT)、與(AND)和或(OR)

1、邏輯非。由一個(gè)英文嘆號(!)表示,可以用于ECMAScript中的任何值。無(wú)論操作數是個(gè)什么數據類(lèi)型,這個(gè)操作符都會(huì )返回一個(gè)布爾值。邏輯非操作符首先會(huì )將它的操作數轉換為一個(gè)布爾值,然后對其求反。遵循一下規則

  • 如果操作數是一個(gè)對象,返回false
  • 如果操作數是一個(gè)空字符串,返回true
  • 如果操作數是一個(gè)非空字符串,返回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、邏輯與。操作符由兩個(gè)和號(&&)表示,有兩個(gè)操作數。邏輯與操作可以應用與任何類(lèi)型的操作數,而不僅僅是布爾值。在有一個(gè)操作數不是布爾值的情況下,邏輯與操作就不一定返回布爾值;此時(shí),它遵循以下規則:

  • 如果第一個(gè)操作數是對象,則返回第二個(gè)操作數
  • 如果第二個(gè)操作數是對象,則只有在第一個(gè)操作數的求值結果為true的情況下才會(huì )返回該對象
  • 如果兩個(gè)操作數都是對象,則返回第二個(gè)操作數
  • 如果第一個(gè)操作數是null,則返回null
  • 如果第一個(gè)操作數是NaN,則返回NaN
  • 如果第一個(gè)操作數是undefined,則返回undefined

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

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

  • 如果第一個(gè)操作數是對象,則返回第一個(gè)操作數
  • 如果第一個(gè)操作數的求值結果為false,則返回第二個(gè)操作數
  • 如果兩個(gè)操作數都是對象,則返回第一個(gè)操作數
  • 如果兩個(gè)操作數都是null,則返回null
  • 如果兩個(gè)操作數都是NaN,則返回NaN
  • 如果兩個(gè)操作數都是undefined,則返回undefined

與邏輯與操作符相似,邏輯或操作符也是短路操作。也就是說(shuō),如果第一個(gè)操作數的求值結果為true,就不會(huì )對第二個(gè)操作數求值了

乘性操作符

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

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

  • 如果操作數都是數值,執行常規的乘法計算,即兩個(gè)正數或兩個(gè)負數相乘的結果還是正數,而如果只有一個(gè)操作數有符號那么結果就是負數。如果乘積超過(guò)了ECMAScript數值的表示范圍,則返回Infinity或-Infinity
  • 如果有一個(gè)操作數是NaN,則結果是NaN
  • 如果是Infinity與0相乘,則結果是NaN
  • 如果是Infinity與非0數值相乘,則結果是Infinity或-Infinity,取決于有符號操作數的符號
  • 如果是Infinity與Infinity相乘,則結果是Infinity
  • 如果有一個(gè)操作數不是數值,則在后臺調用Number()將其轉換為數值,然后在應用上面的規則

2、除法。操作符由一個(gè)斜線(xiàn)符號(/)表示,執行第二個(gè)操作數除第一個(gè)操作數的計算。遵循一下規則:

  • 如果操作數都是數值,執行常規的除法計算,即兩個(gè)正數或兩個(gè)負數相除結果還是正數;如果只有一個(gè)操作數有符號,那么結果就是負數。如果超過(guò)了ECMAScript數值的表示范圍,則返回Infinity或-Infinity
  • 如果有一個(gè)操作數是NaN,則結果是NaN
  • 如果是Infinity被Infinity除,則結果是NaN
  • 如果是0被0除,則結果是NaN
  • 如果是非零的有限數被零除,則結果是Infinity或-Infinity,取決于有符號操作數的符號
  • 如果是Infinity被任何非零數值除,則結果是Infinity或-Infinity,取決于有符號操作數的符號
  • 如果有一個(gè)操作數不是數值,則在后臺調用Number()將其轉換為數值,然后再應用上面的規則

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

  • 如果操作數都是數值,執行常規的除法計算,返回除得的余數
  • 如果被除數是無(wú)窮大值而除數是有限大的數值,則結果是NaN
  • 如果被除數是有限大的數值而除數是零,則結果是NaN
  • 如果是Infinity被Infinity除,則結果是NaN
  • 如果被除數是有限大的數值而除數是無(wú)窮大的數值,則結果是被除數
  • 如果被除數是零,則結果是零
  • 如果有一個(gè)操作數不是數值,則在后臺調用Number()將其轉換為數值,然后在應用上面規則

加性操作符

與乘性操作符類(lèi)似,加性操作符也會(huì )在后臺轉換不同的數據類(lèi)型。

1、加法。加法操作符由加號(+)表示。如果兩個(gè)操作數都是數值,執行常規的加法計算,然后根據下列規則返回結果:

  • 如果有一個(gè)操作數是NaN,則結果是NaN
  • 如果是Infinity加Infinity,則結果是Infinity
  • 如果是-Infinity加-Infinity,則結果是-Infinity
  • 如果是Infinity加-Infinity,則結果是NaN
  • 如果是+0加+0,則結果是+0
  • 如果是-0加-0,則結果是-0
  • 如果是+0加-0,則結果是0

如果有一個(gè)操作數是字符串,那么就要應用如下規則:

  • 如果兩個(gè)操作數都是字符串,則將第二個(gè)操作數與第一個(gè)操作數拼接起來(lái)
  • 如果只有一個(gè)操作數是字符串,則將另一個(gè)操作數轉換為字符串,然后再將兩個(gè)字符串拼接起來(lái)
  • 如果有一個(gè)操作數是對象、數值或布爾值,則調用它們的toString()方法取得相應的字符串值,然后再應用前面關(guān)于字符串的規則
  • 如果是undefined和null,則分別調用String()函數并取得字符串"undefined"和"null"

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

  • 如果兩個(gè)操作符都是數值,則執行常規的算術(shù)減法操作并返回結果
  • 如果有一個(gè)操作數是NaN,則結果是NaN
  • 如果是Infinity減Infinity,則結果是NaN
  • 如果是-Infinity減-Infinity,則結果是NaN
  • 如果是Infinity減-Infinity,則結果是Infinity
  • 如果是-Infinity將Infinity,則結果是-Infinity
  • 如果是+0減+0,則結果是+0
  • 如果是-0減+0,則結果是-0
  • 如果是-0減-0,則結果是+0
  • 如果有一個(gè)操作數是字符串、布爾值、null或undefined,則現在后臺調用Number()函數將其轉換為數值,然后再根據前面的規則執行減法計算。如果轉換結果是NaN,則減法的結果就是NaN
  • 如果有一個(gè)操作數是對象,則調用對象的valueOf()方法以取得表示該對象的數值。如果得到的值是NaN,則減法結果就是NaN。如果對象沒(méi)有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

關(guān)系操作符

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

  • 如果兩個(gè)操作數都是數值,則執行數值比較
  • 如果兩個(gè)操作數都是字符串,則比較兩個(gè)字符串對應的字符編碼值
  • 如果一個(gè)操作數是數值,則將另一個(gè)操作數轉換為一個(gè)數值,然后執行數值比較
  • 如果一個(gè)操作數是對象,則調用這個(gè)對象的valueOf()方法,用得到的結果按照前面的的規則進(jìn)行比較。如果對象沒(méi)有valueOf()方法,則調用toString()方法,并用得到的結果根據前面的規則執行比較
  • 如果一個(gè)操作數是布爾值,則先將其轉換為數值,然后再執行比較

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

相等操作符

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

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

  • 如果一個(gè)操作數是布爾值,則在比較相等性之前先將其轉換為數值——false轉換為0,true轉換為1
  • 如果一個(gè)操作數是字符串,另一個(gè)操作數是數值,在比較相等性之前先將字符串轉換為數值
  • 如果一個(gè)操作數是對象,另一個(gè)操作數不是,則調用對象的valueOf()方法,用得到的基本類(lèi)型值按照前面的規則進(jìn)行比較

這兩個(gè)操作符在進(jìn)行比較時(shí)要遵循下列規則

  • null和undefined事相等的
  • 比較相等性之前,不能將null和undefined轉換成其他任何值
  • 如果有一個(gè)操作數是NaN,則相等操作符返回false,而不相等操作符返回true。即使兩個(gè)操作數都是NaN,則相等操作符也返回false;因為按照規則,NaN不等于NaN
  • 如果兩個(gè)操作數都是對象,則比較它們是不是同一個(gè)對象。如果兩個(gè)操作數都指向同一個(gè)對象,則相等操作符返回true;否則,返回false

2、全等和不全等。全等操作符由3個(gè)等于號(===)表示,它只在兩個(gè)操作數未經(jīng)轉換就相等的情況下返回true。不全等操作符有一個(gè)嘆號后跟兩個(gè)等于號(!==)表示,它在兩個(gè)操作數未經(jīng)轉換就不相等的情況下返回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

條件操作符

語(yǔ)法:var max = (num1 > num2) ? num1 : num2

以上例子中,max中將會(huì )保存一個(gè)最大的值,表達式的意思是:如果num1大于num2(關(guān)系表達式返回true),則將num1的值賦給max;如果num1小于或等于num2(關(guān)系表達式返回false),則將num2的值賦給max

賦值操作符

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

  • 乘/賦值——*=
  • 除/賦值——/=
  • 模/賦值——%=
  • 加/賦值——+=
  • 減/賦值——-=
  • 左移/賦值——<<=
  • 有符號右移/賦值——>>=
  • 無(wú)符號右移/賦值——>>>=

逗號操作符

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

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

總結

到此這篇關(guān)于ECMAScript中操作符的文章就介紹到這了,更多相關(guān)ECMAScript操作符內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

乱码精品一区二区三区| 99香蕉国产精品偷在线观看| 久久综合亚洲欧美成人| 美女视频黄频大全免费| 麻豆AV一区二区三区| 亚洲熟女WWW一区二区三区|