为何JavaScript中"2" < "123"为false,而2 < "123"为true?
JavaScript中字符串与数字比较的差异解析
你遇到的差异核心是JavaScript的比较规则不同,下面分两种情况解释:
情况1:字符串与字符串比较('2' < '123')
当两个操作数都是字符串时,JavaScript会按照**Unicode码点(ASCII是Unicode的子集)**逐字符进行对比:
- 先取两个字符串的第一个字符:
'2'的Unicode码点是50,'123'的第一个字符'1'码点是49 - 因为50 > 49,所以直接判定
'2'大于'123',返回false - 这种对比不会将字符串转为数值,也不会考虑字符串的长度,只按字符顺序逐位比较
情况2:数字与字符串比较(2 < '123')
当操作数一个是数字、一个是字符串时,JavaScript会先尝试将字符串转换为数字:
'123'会被转换为数字123- 随后进行数值比较:
2 < 123,结果为true
代码验证
console.log('2' < '123'); // 输出 false console.log(2 < '123'); // 输出 true
内容的提问来源于stack exchange,提问作者Anurag Yadav
相关产品推荐
相关产品推荐

