運算符
也叫操作符
通過運算符可以對一個或多個值進行運算,並獲取運算結果
比如:typeof就是運算符,可以來獲得一個值的類型
它會將該值的類型以字符串的形式返回
number string boolean undefined object
算數運算符
當對非Number類型的值進行運算時,會將這些值轉換爲Number然後在運算
任何值和NaN做運算都得NaN
+ 可以對兩個值進行加法運算,並將結果返回
如果對兩個字符串進行加法運算,則叫做拼串
會將兩個字符串拼接爲一個字符串,並返回
任何的值和字符串做加法運算,都會先轉換爲字符串,然後再和字符串做拼串的操作
+ 可以對兩個值進行減法運算,並將結果返回
* 可以對兩個值進行乘法運算
/ 可以對兩個值進行除法運算
% 取模運算(取餘數)
任何值和字符串相加都會轉換爲字符串,並做拼串操作。
我們可以利用這一特點,來將一個任意的數據類型轉換爲String;
我們只需要爲任意的數據類型 + 一個 "" 即可將其轉換爲String;
這是一種隱式的類型轉換,由瀏覽器自動完成,實際上它也是調用String()函數。
var c = 123;
c = c + "";
任何值做- * /運算時都會自動轉換爲Number;
我們可以利用這一特點做隱式的類型轉換;
可以通過爲一個值 -0 *1 /1來將其轉換爲Number;
原理和Number()函數一樣,使用起來更加簡單。
var d = "123";
d = d - 0;
一元運算符,只需要一個操作數
+ 正號 正號不會對數字產生任何影響
- 負號 負號可以對數字進行負號的取反
- 對於非Number類型的值,它會將先轉換爲Number,然後在運算
可以對一個其他的數據類型使用+,來將其轉換爲number,它的原理和Number()函數一樣。
自增 ++
通過自增可以使變量在自身的基礎上增加1;
對於一個變量自增以後,原變量的值會立即自增1;
自增分成兩種:後++(a++) 和 前++(++a) ;
無論是a++ 還是 ++a,都會立即使原變量的值自增1;
不同的是a++ 和 ++a的值不同;
a++的值等於原變量的值(自增前的值)
++a的值等於新值 (自增後的值)
自減 –
通過自減可以使變量在自身的基礎上減1;
自減分成兩種:後--(a--) 和 前--(--a);
無論是a-- 還是 --a 都會立即使原變量的值自減1;
不同的是a-- 和 --a的值不同;
a-- 是變量的原值 (自減前的值);
--a 是變量的新值 (自減以後的值)。
邏輯運算符
JS中爲我們提供了三種邏輯運算符
! 非
!可以用來對一個值進行非運算;
所謂非運算就是值對一個布爾值進行取反操作,
如果對一個值進行兩次取反,它不會變化;
如果對非布爾值進行元素,則會將其轉換爲布爾值,然後再取反;
我們可以利用該特點,來將一個其他的數據類型轉換爲布爾值,原理和Boolean()函數一樣。
&& 與
&&可以對符號兩側的值進行與運算並返回結果
運算規則
兩個值中只要有一個值爲false就返回false,
只有兩個值都爲true時,纔會返回true
JS中的“與”屬於短路的與,
如果第一個值爲false,則不會看第二個值。
|| 或
||可以對符號兩側的值進行或運算並返回結果;
運算規則:
兩個值中只要有一個true,就返回true
如果兩個值都爲false,才返回false
JS中的“或”屬於短路的或,
如果第一個值爲true,則不會檢查第二個值
&& || 非布爾值的情況
對於非布爾值進行與或運算時,會先將其轉換爲布爾值,然後再運算,並且返回原值
與運算:
如果第一個值爲true,則必然返回第二個值
如果第一個值爲false,則直接返回第一個值
或運算
如果第一個值爲true,則直接返回第一個值
如果第一個值爲false,則返回第二個值
賦值運算符:
= 可以將符號右側的值賦值給符號左側的變量
+= a += 5 等價於 a = a + 5
-= a -= 5 等價於 a = a - 5
*= a *= 5 等價於 a = a * 5
/= a /= 5 等價於 a = a / 5
%= a %= 5 等價於 a = a % 5
關係運算符:
通過關係運算符可以比較兩個值之間的大小關係,
如果關係成立它會返回true,如果關係不成立則返回false
> 大於號
判斷符號左側的值是否大於右側的值
如果關係成立,返回true,如果關係不成立則返回false
>= 大於等於
判斷符號左側的值是否大於或等於右側的值
< 小於號
<= 小於等於
非數值的情況
對於非數值進行比較時,會將其轉換爲數字然後在比較
如果符號兩側的值都是字符串時,不會將其轉換爲數字進行比較
而會分別比較字符串中字符的Unicode編碼
//任何值和NaN做任何比較都是false
console.log(10 <= "hello"); //false
console.log(true > false); //true
console.log("1" < "5"); //true
console.log("11" < "5"); //true
/*比較兩個字符串時,比較的是字符串的字符編碼
比較字符編碼時是一位一位進行比較
如果兩位一樣,則比較下一位,所以借用它來對英文進行排序*/
console.log("abc" < "bcd");//true
//比較中文時沒有意義
//console.log("戒" > "我"); //true
//如果比較的兩個字符串型的數字,可能會得到不可預期的結果
//注意:在比較兩個字符串型的數字時,一定一定一定要轉型
console.log("11123123123123123123" < +"5"); //true
在字符串中使用轉義字符輸入Unicode編碼
\u四位編碼
console.log("\u2620");
在網頁中使用Unicode編碼
編碼; 這裏的編碼需要的是10進制
相等運算符:
相等運算符用來比較兩個值是否相等,
如果相等會返回true,否則返回false
使用 == 來做相等運算
當使用==來比較兩個值時,如果值的類型不同,
則會自動進行類型轉換,將其轉換爲相同的類型然後再比較
使用 != 來做不相等運算
不相等用來判斷兩個值是否不相等,如果不相等返回true,否則返回false;
不相等也會對變量進行自動的類型轉換,如果轉換後相等它也會返回false
=== 全等
用來判斷兩個值是否全等,它和相等類似,不同的是它不會做自動的類型轉換;
如果兩個值的類型不同,直接返回false
!== 不全等
用來判斷兩個值是否不全等,和不等類似,不同的是它不會做自動的類型轉換
如果兩個值的類型不同,直接返回true。
/* undefined 衍生自 null,所以這兩個值做相等判斷時,會返回true*/
console.log(undefined == null);//true
/*NaN不和任何值相等,包括他本身*/
console.log(NaN == NaN); //false
//判斷b的值是否是NaN
//可以通過isNaN()函數來判斷一個值是否是NaN,如果該值是NaN則返回true,否則返回false
var b = NaN;
console.log(isNaN(b));
console.log("1" != 1);//false
console.log("123" === 123);//false
console.log(null === undefined);//false
console.log(1 !== "1"); //true
條件運算符也叫三元運算符
語法:
條件表達式 ? 語句1 : 語句2;
執行的流程:
條件運算符在執行時,首先對條件表達式進行求值,
如果該值爲true,則執行語句1,並返回執行結果
如果該值爲false,則執行語句2,並返回執行結果
如果條件的表達式的求值結果是一個非布爾值,會將其轉換爲布爾值然後再運算。
運算符的優先級:
和數學中一樣,在JS中運算符也有優先級,比如:先乘除 後加減;
在JS中有一個運算符優先級的表,在表中越靠上優先級越高,優先級越高越優先計算,
如果優先級一樣,則從左往右計算。
但是這個表我們並不需要記憶,如果遇到優先級不清楚,可以使用()來改變優先級。
代碼塊:
我們的程序是由一條一條語句構成的,語句是按照自上向下的順序一條一條執行的,
在JS中可以使用{}來爲語句進行分組,
同一個{}中的語句我們稱爲是一組語句,它們要麼都執行,要麼都不執行,
一個{}中的語句我們也稱爲叫一個代碼塊,
在代碼塊的後邊就不用再編寫;了,
JS中的代碼塊,只具有分組的的作用,沒有其他的用途,代碼塊內容的內容,在外部是完全可見的。
{
var a = 10;
alert("hello");
console.log("你好");
document.write("語句");
}
console.log("a = "+a);