Javascript 数值比较运算符究竟是如何处理字符串的?

Posted

技术标签:

【中文标题】Javascript 数值比较运算符究竟是如何处理字符串的?【英文标题】:how exactly do Javascript numeric comparison operators handle strings? 【发布时间】:2011-12-31 21:52:02 【问题描述】:
var i = ['5000','35000'];
alert((i[0] < i[1])?'well duh!':'fuzzy math?');
alert((Number(i[0]) < Number(i[1]))?'well duh!':'fuzzy math?');

这里发生了什么?在第一个警报中,文本字符串“5000”的计算结果为小于“35000”。我假设 javascript 在数字比较字符串时使用了 Number(),但显然情况并非如此。只是好奇 Javascript 在默认情况下如何处理数字字符串的数字比较。

【问题讨论】:

【参考方案1】:

Javascript 按字符值比较字符串,无论字符串看起来是否像数字。

您可以在spec,第 11.8.5 节,第 4 点中看到这一点。

'a' &lt; 'b''ab' &lt; 'ac 都是真的。

【讨论】:

谢谢!这点 4(a) 字符串比较前缀标准也很有趣。 好吧,我还是遗漏了一些东西——我理解你上面的例子,但我不明白“5000”的字符值如何不小于“35000”的字符值。你能告诉我如何为我的具体示例计算字符值吗? @Wick: "5""3" 多。这是一个纯粹基于字符的比较。 规范链接现在似乎有一些新内容(毒瘾的艺术疗法)。

以上是关于Javascript 数值比较运算符究竟是如何处理字符串的?的主要内容,如果未能解决你的问题,请参考以下文章

Spring BeanPostProcessor 究竟是如何工作的?

如何处理来自存储在vue中的空数据

Spring RowMapper 接口究竟是如何工作的?

三元运算符如何处理比较运算符(宇宙飞船运算符)

如何处理 javascript 中的 256 位数字并对它们执行按位运算?

RESTful 应用程序的 @ResponseStatus Spring 注释究竟是如何工作的?