賦值運算符:用以給變量進行賦值
最常見的賦值運算符就是等號(=),將右側的值賦給左側的變量(表達式x=y表示將y賦值給x)
x += y // 等同於 x = x + y
還有其他更多的復合賦值運算
- x -= y 等同於 x = x - y
- x *= y 等同於 x = x * y
- x /= y 等同於 x = x / y
- x %= y 等同於 x = x % y
- x >>= y 等同於 x = x >> y
- x <<= y 等同於 x = x << y
- x >>>= y 等同於 x = x >>> y
- x &= y 等同於 x = x & y
- x |= y 等同於 x = x | y
- x ^= y 等同於 x = x ^ y
這些符合賦值運算符都是先進行指定運算,然后再將值賦給左邊
示例:(求10除以3的余數)
關系運算符:
目的:用於判斷比較兩個值的大小,然后返回一個布爾值,表示是否滿足比較條件
- 如果關系成立返回true;
- 如果關系不成立返回 false
實例:(比較2是否大於1,返回值為true)
常用的比較運算符:
比較運算符的算法:
比較運算符可以比較各種類型的值,不僅僅是數值類型對的數據,除了相等運算符和精確運算符,其他比較運算符的通用算法如下:
- 如果兩個運算子都是字符串,則按照字典順序比較(比較Unicode編碼順序)
- 否則兩個運算子都先將轉化為數值再進行比較。(等同於先調用Number函數)
一、除了相等運算符和精確運算符,其他比較運算符
(一)原始類型值的比較
字符串和布爾值都先轉換成數字類型,然后再進行比較
var aa=5 > '4' ; console.log(aa); // 5 > Number('4') // 即 5 > 4
aa=true > false; console.log(aa); // Number(true) > Number(false) // 即 1 > 0
aa=2 > true ; console.log(aa); // 2 > Number(true) // 即 2 > 1
(二)對象的比較
在對對像進行比較之前,要先將對象用valueOf( )方法轉換成原始數字類型的值,如果返回的結果還是對象,就繼續調用toString( )方法,將其轉換成字符類型。
實例:
1、對象與原始數據類型的比較
2、對象與對象的比較
var aa=[2]; window.alert(aa > [3]) // 等同於 [2].valueOf().toString() > [11].valueOf().toString() // 即 '2' > '3'
(三)字符串的比較
字符串按照字典順序進行比較
JavaScript內部引擎會先比較首字符的Unicode碼點,如果首字符相同,會比較第二個字符,以此類推。
實例:
1、小寫的 c 的 Unicode 碼點( 99 )大於大寫的 C 的 Unicode 碼點( 67 ),所以返回 true 。
由於Unicode字符集涵蓋了所有字符,所以漢字也可以進行比較。
2、因為“天” 的Unicode碼點是5929,“地”的Unicode編碼是5730,所以返回true
二、恆等運算符(嚴格相等運算符)
JavaScript中有兩個相等運算符, ==和 ===
區別:相等運算符== 比較的是兩個值是否相等;
嚴格相等運算符=== 比較它們是否為“同一個值”,如果不是同一類型的值,嚴格相等運算符會直接返回 false;
相等運算符== 會將兩個值轉換為同一數據類型,再用嚴格相等運算符進行比較。
(一)嚴格相等運算符的算法:
1、不同類型的值
如果兩個類型的值不同,直接返回flase
1是Number類型,"1"是字符串類型的,進行===運算,不同的數據類型所以返回flase;
true是布爾值,"true"字符串類型,不同數據類型返回false;
相等運算中先將數字1和字符"1"轉換為相同類型,再進行比較,所以返回true;
2、同一類型的原始值
同一類型的原始類型值(字符串,布爾值,數字)進行比較,值相同就返回true,值不同時就返回false
實例:(比較十進制的1和十六進制的1,類型和值都相同,所以返回true)
注意:NaN與任何值都不相同(包括自身),0也不分正負,正0與負0相同。
3、同一類的復合類型值
比較同一類型的符合類型值(對象,數組,函數)的數據比較時,不是比較他們的值是否相同,而是比較是否指向同一個對象
比較兩個空字對象、空數組、空函數,結果都不相等。
因為對於復合類型的值,嚴格相等運算比較的是是否引用同一個內存地址,而運算符兩側的空對象,空數組,空函數他們的值都存放在不同的內存地址中,結果當然是false。
如果兩個變量引用同一個對象,則他們相等,結果返回true
對於兩個對象的比較,嚴格相等運算符比較的是地址,大於小於號比較的是值。
實例:(前兩個比較的是值,最后一個比較的是地址。)
new Date() > new Date() // false new Date() < new Date() // false new Date() === new Date() // false
4、Undefined和null
Undefined和null與自身嚴格相等
變量聲明后的默認值是Undefined,因此兩個只聲明未賦值的變量值是相等的
5、嚴格不相等運算符
嚴格相等運算符有一個對應的“嚴格不相等運算符”( !== ),兩者的運算結果正好相反
三、相等運算符
相等運算符在數據類型相同的時候,與嚴格運算符運算規則相同
數據類型不相同的時候,會先將字符類型都轉換成一樣的,再利用嚴格運算符進行比較。
類型轉換規則:
1、原始類型的值
原始類型的值會轉換為數據類型的值再進行比較
2、對象與原始類型值比較
對象(這里指廣義的對象,包括數組和函數)與原始類型的值比較時,對象轉化成原始類型的值,再進行比較。
3、Undefined和null類型比較
Undefined和null類型與其他數據進行比較的時候返回的都是flase,這兩種數據相互比較的時候返回值為true
4、相等運算符的缺點
相等運算符有的時候在數據類型轉換對表達式進行變化,容易出錯,因此最好不要使用相等運算符(==),要用嚴格相等運算符
5、不相等運算
不相等運算符(!=) 和相等運算符的運算結果相反