JavaScript賦值運算符和關系運算符


賦值運算符:用以給變量進行賦值

最常見的賦值運算符就是等號(=),將右側的值賦給左側的變量(表達式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、不相等運算

不相等運算符(!=) 和相等運算符的運算結果相反

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM