溫馨提示×

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

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

JavaScript中有哪些極易出錯(cuò)的操作符運(yùn)算

發(fā)布時(shí)間:2021-08-10 17:38:00 來(lái)源:億速云 閱讀:99 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章給大家分享的是有關(guān)JavaScript中有哪些極易出錯(cuò)的操作符運(yùn)算,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

算術(shù)運(yùn)算符

+ - * / % ()

非正常情況1: 有特殊值字面量參與的運(yùn)算

  • NaN參與的運(yùn)算:得到的結(jié)果都是NaN

  • Infinity參與的運(yùn)算,視情況而定, 比如:

5/Infinity=0
5%Infinity=5
Infinity%5=NaN
Infinity+5=Infinity
Infinity / Infinity = NaN
Infinity - Infinity = NAN
Infinity % Infinity = NAN

工作中并不會(huì)使用特殊值運(yùn)算,沒(méi)有實(shí)際應(yīng)用的意義,但是要了解,以防面試遇到

非正常情況2: 其他類型的數(shù)據(jù)參與數(shù)學(xué)運(yùn)算。

有字符串參與的 + 運(yùn)算(包括只有符號(hào)一邊有字符的情況):+ 號(hào)變?yōu)檫B字符將前后連接成整體字符串。

例如:

var a = 3 - "36" % 5 + "2" - 2
        console.log(a)
        var b = "36" % 5
        console.log(b)
        var c = 3 - "36" % 5 + "2"
        console.log(c)

輸出:

20
1
22

隱式轉(zhuǎn)換:除了字符串參與的 + 運(yùn)算,其他情況下,所有其他數(shù)據(jù)類型參與數(shù)學(xué)運(yùn)算時(shí),計(jì)算機(jī)暗中將其他數(shù)據(jù)類型先自動(dòng)轉(zhuǎn)換成數(shù)字類型,再參與運(yùn)算,這個(gè)過(guò)程中不需要使用parseInt()、Number() 等方法,過(guò)程是暗中進(jìn)行,這就是一個(gè)隱式轉(zhuǎn)換的過(guò)程。

隱式轉(zhuǎn)換

其他的數(shù)據(jù)類型會(huì)隱式轉(zhuǎn)換為數(shù)字類型:

  • 對(duì)應(yīng)數(shù)字:純數(shù)字字符串會(huì)轉(zhuǎn)為對(duì)應(yīng)的數(shù)字”123”→123

  • 轉(zhuǎn)換為1: true

  • 轉(zhuǎn)換為0:false、null、 “”空字符串、空白字符串

  • 轉(zhuǎn)換為NaN:undefined、非空非純數(shù)字字符串

比較運(yùn)算符

也叫作關(guān)系運(yùn)算符。一個(gè) 比較運(yùn)算符 comparison operator 比較它的操作數(shù)并返回一個(gè)布爾類型值。運(yùn)算結(jié)果要么是true,要么是false。

>  大于

<  小于

>= 大于等于

<= 小于等于

== 相等,只判斷值大小是否相等,不判斷數(shù)據(jù)類型

!= 不等,與相等完全相反

===全等,不光判斷值相等,還要判斷數(shù)據(jù)類型相等

!==不全等,與全等于完全相反

非正常情況1: 特殊值參與比較運(yùn)算

  • NaN參與:不等于和不全等于結(jié)果是 true,其他的都得到 false

  • Infinity參與的運(yùn)算,視情況而定, 比如:

Infinity == Infinity ->True
Infinity === Infinity ->True
Infinity > Infinity ->False
Infinity >= Infinity ->True

非正常情況2: 其他數(shù)據(jù)類型參與比較運(yùn)算(排除字符串與字符串的比較

其他數(shù)據(jù)類型也會(huì)隱式轉(zhuǎn)換為數(shù)字參與比較。

“123”→123 true→1 false→0 null→0 undefined→NaN “”→0 “abc”→NaN

null 的判斷比較特殊:null 與 0 判斷時(shí),相等判斷為 false,>= 和 <= 判斷為 true

null == undefined -> True

非正常情況3: 字符串與字符串比較

不會(huì)發(fā)生隱式轉(zhuǎn)換為數(shù)字,而是比較兩個(gè)字符串的 Unicode 編碼順序

字符編碼順序:從前往后 0-9,A-Z,a-z,前面的小于后面的

比較時(shí),不關(guān)心兩個(gè)字符串的長(zhǎng)度,從第一個(gè)字符開始比較,依次往后順延比較,直到比較出大小,就不再往后比較

邏輯運(yùn)算符

邏輯運(yùn)算符常用于布爾類型值之間; 當(dāng)操作數(shù)都是布爾值時(shí),返回值也是布爾值

&&      邏輯與運(yùn)算符且
||      邏輯或運(yùn)算符
!       邏輯非運(yùn)算符

非正常情況

  • 除了布爾類型的值之外,其他數(shù)據(jù)類型的值也可以參與邏輯運(yùn)算。運(yùn)算過(guò)程中需要將操作數(shù)隱式轉(zhuǎn)換為布爾類型的值,參與判斷計(jì)算,最終運(yùn)算結(jié)果還是原來(lái)的某個(gè)位置的數(shù)據(jù).

  • 并不是所有邏輯運(yùn)算返回結(jié)果都是布爾值,其他數(shù)據(jù)參與得到的就是數(shù)據(jù)本身

隱式轉(zhuǎn)換為布爾值的規(guī)律

  • 轉(zhuǎn)為false:NaN、0、 “”空字符串、null、undefined

  • 轉(zhuǎn)為true:非0 非NaN數(shù)字、非空字符串

當(dāng)它們用于非布爾值的時(shí)候,返回值就可能是非布爾值。其實(shí)這種運(yùn)算非常簡(jiǎn)單:

  • (邏輯與 a && b ) 如果a能被轉(zhuǎn)換為false,那么返回a;否則,返回b

  • (邏輯或 a || b ) 如果a能被轉(zhuǎn)換為true,那么返回a;否則,返回b

邏輯運(yùn)算符運(yùn)算順序

綜合運(yùn)算順序:非、與、或

賦值運(yùn)算符

=   等于
+=  加等于
-=  減等于
*=  乘等于
/=  除等于
%=  取余等于
++  遞加
--  遞減

一元運(yùn)算符

++ -- !

++ 或 -- 符號(hào)可以寫在變量前和變量后面,位置不同可能導(dǎo)致程序運(yùn)行結(jié)果不同

以 ++ 為例:

  • a++: ++ 符號(hào)在變量之后,a++ 在參與程序過(guò)程中使用的原始沒(méi)有加 1 的值,使用完后第二次用 a 變量時(shí),a 用的就是加 1 后的新值。先參與,后自加.

  • ++a:++ 符號(hào)在變量之前,++a 在參與過(guò)程中整體就使用 a 加 1 之后的新值,使用完后第二次用 a 變量時(shí),a 用的也是加 1 的新值。先自加,后參與

例1

var a = 3; 
var b = a++; 
var c = ++a;
console.log(a,b,c)

輸出:

5 3 5

例2

JavaScript中有哪些極易出錯(cuò)的操作符運(yùn)算

輸出:

JavaScript中有哪些極易出錯(cuò)的操作符運(yùn)算

運(yùn)算優(yōu)先級(jí)

優(yōu)先級(jí)從高到底:

1. () 優(yōu)先級(jí)最高

2. 一元運(yùn)算符 ++ -- !

3. 算數(shù)運(yùn)算符 先* / % 后 + -

4. 關(guān)系運(yùn)算符 > >= < <=

5. 相等運(yùn)算符 == != === !==

6. 邏輯運(yùn)算符 先&& 后||

7. 賦值運(yùn)算符

var a = 4; var num = 1 * (2 + 3) && a++ || 5 > 6 && 7 < 8 || !9; 
console.log(num)

輸出:

4

以上就是JavaScript中有哪些極易出錯(cuò)的操作符運(yùn)算,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

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

AI