JavaScript中極易出錯(cuò)的操作符運(yùn)算總結(jié)
算術(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)算,沒有實(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è)過程中不需要使用parseInt()、Number() 等方法,過程是暗中進(jìn)行,這就是一個(gè)隱式轉(zhuǎn)換的過程。
隱式轉(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)算過程中需要將操作數(shù)隱式轉(zhuǎn)換為布爾類型的值,參與判斷計(jì)算,最終運(yùn)算結(jié)果還是原來的某個(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++ 在參與程序過程中使用的原始沒有加 1 的值,使用完后第二次用 a 變量時(shí),a 用的就是加 1 后的新值。先參與,后自加.
- ++a:++ 符號(hào)在變量之前,++a 在參與過程中整體就使用 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
輸出:
運(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
總結(jié)
到此這篇關(guān)于JavaScript中極易出錯(cuò)的操作符運(yùn)算總結(jié)的文章就介紹到這了,更多相關(guān)JavaScript操作符運(yùn)算內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- js 與或運(yùn)算符 || && 妙用
- js中的 || 與 && 運(yùn)算符詳解
- javascript三元運(yùn)算符用法實(shí)例
- javascript typeof的用法與typeof運(yùn)算符介紹[詳細(xì)]
- Javascript 按位取反運(yùn)算符 (~)
- JS按位非(~)運(yùn)算符與~~運(yùn)算符的理解分析
- JS中三目運(yùn)算符和if else的區(qū)別分析與示例
- 詳解js運(yùn)算符單豎杠“|”與“||”的用法和作用介紹
- Javascript 按位左移運(yùn)算符使用介紹(<<)
- 教你JS中的運(yùn)算符乘方、開方及變量格式轉(zhuǎn)換
相關(guān)文章
對(duì)layui中的onevent 和event的使用詳解
今天小編就為大家分享一篇對(duì)layui中的onevent 和event的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09JS實(shí)現(xiàn)用戶注冊(cè)時(shí)獲取短信驗(yàn)證碼和倒計(jì)時(shí)功能
在用戶注冊(cè)時(shí),通常需要短信驗(yàn)證碼,而且為了交互效果,也需要增加倒計(jì)時(shí)。該如何實(shí)現(xiàn)獲取驗(yàn)證碼倒計(jì)時(shí)功能呢?下面小編給大家分享JS實(shí)現(xiàn)用戶注冊(cè)時(shí)獲取短信驗(yàn)證碼和倒計(jì)時(shí)的代碼,一起看看吧2016-10-10uni-app使用uniCloud實(shí)現(xiàn)圖形驗(yàn)證碼(uni-captcha)詳細(xì)過程
這篇文章主要給大家介紹了關(guān)于uni-app使用uniCloud實(shí)現(xiàn)圖形驗(yàn)證碼(uni-captcha)的相關(guān)資料,實(shí)際開發(fā)工作中在登陸的時(shí)候經(jīng)常需要圖形驗(yàn)證碼,需要的朋友可以參考下2023-07-07webpack是如何實(shí)現(xiàn)模塊化加載的方法
這篇文章主要介紹了webpack是如何實(shí)現(xiàn)模塊化加載的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11js統(tǒng)計(jì)頁(yè)面上每個(gè)標(biāo)簽的數(shù)量實(shí)例代碼
這篇文章通過實(shí)例代碼給大家講解了通過js統(tǒng)計(jì)頁(yè)面上每個(gè)標(biāo)簽的數(shù)量,代碼很簡(jiǎn)單,具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-05-05前端使用正則表達(dá)式進(jìn)行校驗(yàn)的方法總結(jié)大全
很多時(shí)候我們需要校驗(yàn)用戶輸入的值是否正確,如果格式固定的,直接把錯(cuò)誤的值傳給后端顯然是不合理的,所以我們要直接在前端進(jìn)行正則校驗(yàn),這篇文章主要給大家介紹了關(guān)于前端使用正則表達(dá)式進(jìn)行校驗(yàn)的相關(guān)資料,需要的朋友可以參考下2024-07-07uniapp實(shí)現(xiàn)橫向滾動(dòng)選擇日期
這篇文章主要為大家詳細(xì)介紹了uniapp實(shí)現(xiàn)橫向滾動(dòng)選擇日期,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10JS使用Date對(duì)象實(shí)時(shí)顯示當(dāng)前系統(tǒng)時(shí)間簡(jiǎn)單示例
這篇文章主要介紹了JS使用Date對(duì)象實(shí)時(shí)顯示當(dāng)前系統(tǒng)時(shí)間,涉及javascript基于定時(shí)器動(dòng)態(tài)操作Date對(duì)象相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-08-08