繁体   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