一、運算符
???????? 定義:運算符也叫做操作符,對兩個值或多個值進(jìn)行運算岩遗,并獲取運算結(jié)果的符號或者函數(shù)。(例如:type of 就是一個運算符凤瘦,通過它可以獲取一個值的類型宿礁,并且已字符串的形式返回)
(一)算數(shù)運算符
注:當(dāng)非Number類型進(jìn)行算數(shù)運算時,先將其轉(zhuǎn)換為Number類型再進(jìn)行算數(shù)運算蔬芥,NaN與任何數(shù)進(jìn)行運算值都為NaN窘拯。
(1)+:對兩個或者多個值進(jìn)行相加,并返回結(jié)果
????????? 1. 如果兩個值都為字符串坝茎,相加的結(jié)果就是字符串拼接。
?????????? 2.任何數(shù)與字符串進(jìn)行相加暇番,都先將其轉(zhuǎn)化為字符串再進(jìn)行拼接嗤放。
?????????????????????? result = true+1;//2
? ? ? ? ? ? ? ? ? ? ? ? result = null+1;//1
??????????????????????? result= "123"+1;//1231
??????????????????????? result= true+"hello";//truehello
???????????????????????? result=1+2+"3";//33
? ? ? ? ? ? ? ? ? ? ? ? ? result="1"+2+3;//123
(2)-:對兩個或者多個值進(jìn)行相減,并返回結(jié)果
??????????????????????????? result=100-true;//99
? ? ? ? ? ? ? ? ? ? ? ? ? ?? result=100-"1";//99
(3)*:對兩個或者多個值進(jìn)行相乘壁酬,并返回結(jié)果
????????????????????????????? result=2*"6";//12
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? result=2*null;//0
? ? ? ? ? ? ? ? ? ? ? ? ? ?? result=2*undefined;//NaN
(4)/:對兩個或者多個值進(jìn)行相除次酌,并返回結(jié)果
(5)%:對數(shù)值進(jìn)行取模運算,并返回結(jié)果
????????????????????????? ?? result=9%3;//0
????????????????????????????? result=9%4;//1
(二)舆乔、算數(shù)運算衍生出來的強制類型轉(zhuǎn)換岳服。
衍生轉(zhuǎn)換為Number的類型
1、變量-0可以轉(zhuǎn)化為Number
2希俩、變量*1可以轉(zhuǎn)化為Number
3吊宋、變量/1可以轉(zhuǎn)化為Number
(三)、一元運算符
(1)颜武、+對于數(shù)值來說沒有啥變化
(2)璃搜、-可以對數(shù)值進(jìn)行取反
???????????? 對于非number的值進(jìn)行取反運算時,先將其轉(zhuǎn)化為Number類型鳞上,對其進(jìn)行取反这吻,也可以通過+來進(jìn)行轉(zhuǎn)換類型其原理與Number()一樣,該屬于隱式轉(zhuǎn)換
?????????????? var result =1 + +"2" + 3;//6
(四)篙议、自增自減運算
1唾糯、自增++
? ? --使用自增可以使變量在自身的基礎(chǔ)上增加1,對于一個變量自增以后,原變量的值會立即加1
??? --自增分為兩種:后++(a++)移怯,前++(++a)
? 相同:無論時a++ 還是++a香璃,都會使原變量的值加1
? 不同:a++和++a的值不同 a++的值等于原變量的值
? ++a得值等于新值
2、自減--
? ? --使用自減可以使變量在自身的基礎(chǔ)上減1芋酌,對于一個變量自減以后增显,原變量的值會立即減1
--自增分為兩種:后--(a--),前--(--a)
? 相同:無論時a-- 還是--a脐帝,都會使原變量的值減1
? 不同:a--和--a的值不同 a--的值等于原變量的值
? --a得值等于新值
(五)同云、邏輯運算符
JS中提供了三種邏輯運算符
!非
----!可以用來對一個值進(jìn)行非運算(對布爾值進(jìn)行取反操作)
----如果對非布爾值進(jìn)行非運算堵腹,則將其轉(zhuǎn)換成布爾值炸站,然后再取反
? ? ? ? ? 所以我們可以利用該特點,來將一個其他的數(shù)值類型轉(zhuǎn)化為boolean
????????? 可以為一個任意數(shù)據(jù)類型取兩次反疚顷,來將其轉(zhuǎn)化為布爾類型
原理Boolean()函數(shù)一樣
&& 與
----&&可以對符號兩側(cè)的值進(jìn)行與運算并返回結(jié)果
----運算規(guī)則:
? ? ? ? ? ? 兩側(cè)都為true運算結(jié)果為ture
?????????? 只要有一個false運算結(jié)果就為false
----JS中的”與“屬于短路與旱易,
??????????????? 如果第一個為false則不會看第二個值
??? //var result=true && alert("我能出來嗎");后邊執(zhí)行
??? //var result=false && alert("我能出來嗎");后邊不執(zhí)行
|| 或
-----||可以對符號兩側(cè)的值進(jìn)行與運算并返回結(jié)果
----運算規(guī)則:
? ? ? ? ? ?? 兩側(cè)都為false運算結(jié)果為false
???????????? 只要有一個true運算結(jié)果就為true
----JS中的”與“屬于短路或,
???????????? 如果第一個為true則不會看第二個值
非布爾類型的情況
&&? ||---對于非布爾值進(jìn)行與或運算時
? ? ? ? 會將其轉(zhuǎn)化為布爾值腿堤,然后再運算阀坏,并且返回原值
? ? ? ---與運算
? -如果第一個值為true,則必然返回第二個值
? -如果第一個為false笆檀,則必然返回第一個值
? ? ? ---或運算
-如果第一個值為true忌堂,則必然返回第一個值
-如果第一個為false,則必然返回第二個值
? //與運算:如果兩個都為true酗洒,返回后邊的值
var result=1 && 2;
//false&&true:如果有false則返回false
result=0 && 2;
result=2 && 0;
//false&&false 兩個都為false士修,返回前邊的值
result=NaN&&0;
result=0&&NaN;
(六)賦值運算
賦值運算符
=
可以將右側(cè)值賦值給左側(cè)變量
+=
a+=5相當(dāng)于a=a+5
-=
a-=5相當(dāng)于a=a-5
*=
a*=5相當(dāng)于a=a*5
/=
a/=5相當(dāng)于a=a/5
%=
a%=5相當(dāng)于a=a%5
(七)關(guān)系運算符
?通過關(guān)系運算符可以比較兩個值之間的大小關(guān)系
如果關(guān)系成立他會返回true,如果關(guān)系不成立就返回false
?>大于號
? ---判斷符號左側(cè)的值是否大于右側(cè)的值
?? 如果關(guān)系成立他會返回true樱衷,如果關(guān)系不成立就返回false
? >=大于等于
? ---判斷符號左側(cè)的值是否大于或等于右側(cè)的值
?? 如果關(guān)系成立他會返回true棋嘲,如果關(guān)系不成立就返回false
? <小于號
? ---判斷符號左側(cè)的值是否小于右側(cè)的值
? ? 如果關(guān)系成立他會返回true,如果關(guān)系不成立就返回false
<=小于等于
? ---判斷符號左側(cè)的值是否小于或等于右側(cè)的值
?? 如果關(guān)系成立他會返回true矩桂,如果關(guān)系不成立就返回false
? 非數(shù)值的類型
? --對于非數(shù)值進(jìn)行比較時沸移,先將其轉(zhuǎn)化為數(shù)字,再進(jìn)行比較
? --如果兩側(cè)都為字符串時耍鬓,不會將其轉(zhuǎn)換城數(shù)字進(jìn)行比較
? 而會分別比較字符串中自符的unicode編碼