可以任何人解释我如何在javascript中进行字符串和数字比较?

时间:2017-12-08 07:29:11

标签: 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

4 个答案:

答案 0 :(得分:2)

将字符串与数字进行比较将强制将字符串数据计算为数字值。如果字符串数据不能转换为数值,它将返回给定比较的NaN数。

由于NaN 不具有可比性,根本不等于任何东西,甚至不是另一个NaN

namespace GenerateApp { public partial class Form1 : Form { string[] name = new string[4]; public Form1() { InitializeComponent(); name[0] = textBox2.Text; name[1] = textBox3.Text; name[2] = textBox5.Text; name[3] = textBox6.Text; } private void button1_Click(object sender, EventArgs e) { for (int i = 0; i < name.Length; i++) { } } } }

&#39;大于&#39;或者小于&#39; NaN比较必须以两种方式返回 false 。因为这是唯一正确的答案,所以没有什么比你没有的更大或更小。因此两种说法都是错误的。例如:NaN == NaN > false0 > NaN&gt;假。

但请记住,比较两个数据字符串,例如: 0 < NaN将返回比较 false , 然而: &#34;图9A&#34; &GT; &#34; 999&#34;将返回 true

这是一个非常强大的事情,因为知道这一点(两个字符串将按字母顺序进行比较),您可以比较时间数据,而无需承担将这些值转换为数字的负担,并直接使用:< / p>

"98A" > "999"

幸运的是"09:32:28" > "09:31:59" > true纯粹(语言)的机会。

答案 1 :(得分:1)

正在尝试将字符串转换为数字。

在控制台中,如果你这样做

x = +''

然后x将设置为01 > 0true

对于所有其他的,如果您执行类似

的操作
x = +'dfdf'

然后x将设置为NaN(不是数字),与它的任何比较都将返回false。

答案 2 :(得分:0)

使用JavaScript时有两种类型的比较,

标准相等运算符(==和!=)使用抽象等式比较算法来比较两个操作数。如果操作数具有不同的类型,它将在进行比较之前尝试将它们转换为相同的类型,例如,在表达式5 ==&#39; 5&#39;中,右边的字符串将转换为数字之前进行比较。

严格相等运算符(===和!==)使用严格等式比较算法,用于对相同类型的操作数执行相等比较。如果操作数的类型不同,结果总是假的,所以5!==&#39; 5&#39;。

因此,如果您想知道那里发生了什么,JavaScript会尝试将字符串转换为数字,然后进行比较,但是,因为它们不是数字,总是转换为NaN,并且与NaN的比较将等于假。

详情链接:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

答案 3 :(得分:0)

String Vs String

比较字符串时,逐个字符地进行比较。在两个字符串中找到的第一个不同字符将使用其char代码进行比较。 (注意:之后的字符将被忽略。)

>> "a".charCodeAt(0)
97
>> "}".charCodeAt(0)
125
>> "}" > "a"
true
>> "-}" > "a"
false

字符串与数字

每次将字符串与数字进行比较时,字符串将转换为整数,然后比较两者。 如果字符串无法转换为数字,则返回false。(注意:NaN,Nothing可以与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