簡體   English   中英

可以任何人解釋我如何在javascript中進行字符串和數字比較?

[英]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 > NaN0 < NaN >假。

但請記住,比較兩個數據字符串,如: "98A" > "999"將返回一個比較錯誤 ,而:“9A”>“999”將返回true

這是一個非常強大的事情,因為知道這一點(兩個字符串將按字母順序進行比較),您可以比較時間數據,而無需承擔將這些值轉換為數字的負擔,並直接使用:

"09:32:28" > "09:31:59" > true

幸運的是"PM" > "AM" > true純粹的(語言)機會。

它試圖將字符串轉換為數字。

在控制台中,如果你這樣做

x = +''

那么x將被設置為0 1 > 0true

對於所有其他人,如果你做了類似的事情

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM