为何使用比较运算符比较'1000'与'200'时返回false?
为什么
'1000' > '200'在JavaScript中返回false? 嘿,这个问题其实是JavaScript字符串比较的一个经典坑点,我来给你掰扯清楚:
当你在JavaScript中使用关系运算符(>、<、>=、<=)比较两个字符串时,它并不会自动把字符串转换成数字来比大小——而是按照字符的Unicode码点(UTF-16编码值)逐个进行比较。具体规则是:
- 从两个字符串的第一个字符开始,依次对比对应位置的字符
- 一旦某一对字符的码点不同,就直接根据这对字符的码点大小得出结果,后面的字符不再参与比较
回到你的例子:
var a = '1000',第一个字符是'1',它的Unicode码点是U+0031(十进制对应49)var b = '200',第一个字符是'2',它的Unicode码点是U+0032(十进制对应50)
因为49 < 50,也就是'1'的码点小于'2',所以直接判定'1000' > '200'为false,后面的'000'和'00'根本没机会参与比较。
如果想要按数值大小比较怎么办?
如果你希望按数字的大小来判断,需要手动把字符串转换成数字,常见的方法有:
- 使用
Number()函数:console.log(Number(a) > Number(b))→ 输出true - 利用一元加号
+转换:console.log(+a > +b)→ 输出true - 使用
parseInt()或parseFloat():console.log(parseInt(a) > parseInt(b))→ 输出true
需要注意的是,如果字符串包含非数字字符,转换时会得到NaN,这时候比较结果会是false,所以转换前最好先确认字符串是有效的数字格式。
内容的提问来源于stack exchange,提问作者Nguyen Duc Duy
相关产品推荐
相关产品推荐

