You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用比较运算符比较'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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:01:32