02_javascript運算符

運算符

也叫操作符
通過運算符可以對一個或多個值進行運算,並獲取運算結果
比如: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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章