[英]Can any one explain me how does the string and number comparison work in javascript?
我比較了一些字符串和數字,看到結果為真和假
"dfdf" > 1
false
"dfdf" > 99
false
"dfdf" > 9999
false
"dfdf" > 99999
false
1> ''
true
1> '545'
false
1> '545d'
false
1> '555'
false
1> 'ddfdf'
false
9999 > 'dfsdfadf'
false
我已經在代碼中嘗試了幾種不同的組合,但你得到了混合的結果,並想知道javascript中的比較是如何工作的。
另一個更令人困惑的補充
"dasfads" > "dasfdsf"
false
"abc" > "a"
true
"abc" > "agf"
false
"abcf" > "agf"
false
將字符串與數字進行比較將強制將字符串數據計算為數字值。 如果字符串數據不能轉換為數值,它將返回給定比較的NaN數。
由於NaN 不具有可比性,也不等於任何東西,甚至不是另一個NaN
NaN == NaN > false
“大於”或“小於”NaN比較必須雙向返回false 。 因為這是唯一正確的答案,沒有什么比你沒有的更大或更小。 因此兩種說法都是錯誤的。 例如: 0 > NaN
和0 < NaN
>假。
但請記住,比較兩個數據字符串,如: "98A" > "999"
將返回一個比較錯誤 ,而:“9A”>“999”將返回true
這是一個非常強大的事情,因為知道這一點(兩個字符串將按字母順序進行比較),您可以比較時間數據,而無需承擔將這些值轉換為數字的負擔,並直接使用:
"09:32:28" > "09:31:59" > true
幸運的是"PM" > "AM" > true
純粹的(語言)機會。
它試圖將字符串轉換為數字。
在控制台中,如果你這樣做
x = +''
那么x
將被設置為0
。 1 > 0
是true
。
對於所有其他人,如果你做了類似的事情
x = +'dfdf'
那么x
將被設置為NaN
(不是數字),與它的任何比較都將返回false。
使用JavaScript時有兩種類型的比較,
標准相等運算符(==和!=)使用抽象等式比較算法來比較兩個操作數。 如果操作數具有不同的類型,則它將在進行比較之前嘗試將它們轉換為相同的類型,例如,在表達式5 =='5'中,在進行比較之前,右邊的字符串被轉換為數字。
嚴格相等運算符(===和!==)使用嚴格等式比較算法,用於對相同類型的操作數執行相等比較。 如果操作數的類型不同,則結果始終為false,因此5!=='5'。
因此,如果你想知道那里發生了什么,JavaScript會嘗試將字符串轉換為數字然后進行比較,因為它們不是一個數字,它總是被轉換為NaN,並且與NaN的比較將等於假。
鏈接詳情:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
String Vs String
比較字符串時,逐個字符地進行比較。 在兩個字符串中找到的第一個不同字符將使用其char代碼進行比較。 (注意:之后的字符將被忽略。)
>> "a".charCodeAt(0)
97
>> "}".charCodeAt(0)
125
>> "}" > "a"
true
>> "-}" > "a"
false
String Vs Number
每次將字符串與數字進行比較時,字符串將轉換為整數,然后進行比較。 如果字符串無法轉換為數字,則返回false。 (注意:NaN,沒有什么可以與NaN進行比較。任何與NaN的比較都將返回false)
>> 'dfsdfadf' > 999999 // Can't be converted to integer, hence false
false
>> 'd' > 9999999999 // Can't be converted to integer, hence false
false
>> '' == false // '' is empty string which is 0 or false
true
>> 1 > '' // '' is false,0 explained in prev case
true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.