繁体   English   中英

为什么Number <String在JavaScript中返回true?

[英]Why does Number < String returns true in JavaScript?

编辑:我将重新解释我的问题,我输入Number <String并返回true,当我输入typeof(2)<typeof(“2”)时也可以。

Number < String => true
typeof(2) < typeof("2") => true

我猜它是Number和String中每个字母的ASCII字符的值,但我不确定这是否是返回true的原因,我想知道为什么会发生这种情况,什么过程或者如何解释得到这个结果?

第一个答案:

charCodeAt()方法返回给定索引处字符的数字Unicode值。 在这里阅读

现在,如果您未指定任何索引位置,则考虑第0个索引处的字符。 现在, S ASCII值为83N ASCII值为78 所以,你得到的那些号码。 点击这里

并且78 < 83 => true是显而易见的。

尝试"String".charCodeAt(1) ,你将获得116这是t ASCII值


基于OP编辑问题的第二个答案:

坦率地说,你的比较Number < String在技​​术上是“不正确的,因为Less-than Operator <或任何类似的运算符用于表达式,而NumberString是函数而不是表达式。 @Pointy解释了Number < String工作原理并给出了结果。

更深入地了解比较运算符

<在表达式上工作的比较运算符, 在这里阅读。 通常,您应该具有RHS和LHS的有效表达式或已解析值。

现在这是表达式的定义, 在这里阅读更多 - “ 表达式是解析为值的任何有效代码单元。从概念上讲,有两种类型的表达式:为变量赋值的那些和只有变量的变量。价值。

所以, (x = 7) < (x = 2)new Number() < new String()是一个“技术上”有效/良好的比较,甚至这个Object.toString < Number.toString()但实际上不是Object < Function

以下是比较的规则/功能,请在此处阅读更多内容

  • 两个字符串在相应位置具有相同的字符序列,相同的长度和相同的字符时严格相等。
  • 两个数字在数值上相等(具有相同的数值)时严格相等。 NaN不等于任何东西,包括NaN。 正负零彼此相等。
  • 如果两个布尔操作数都为真或两者都为假,则它们严格相等。
  • 对于严格或抽象的比较,两个不同的对象永远不会相等。
  • 仅当操作数引用相同的Object时,才会使用比较Objects的表达式。
  • 空和未定义类型严格等于它们自己并且抽象地彼此相等。

的结果

Number < String

不是比较串“数字”和“字符串”,或者不完全是结果。 这是比较从Number.toString()String.toString()返回的字符串的结果。 那些字符串(在我所知的所有运行时)中都有更多东西,而不仅仅是字符串“Number”和“String”,但这两个子字符串将是它们不同的第一个字符串。

您可以通过键入来查看这些实际字符串是什么

Number.toString()

在浏览器控制台中。

JavaScript执行以下操作:

"String".charCodeAt(); => 83
"S".charCodeAt(); => 83
"String".charCodeAt(0); => 83

方法charCodeAt(a)从位置a获取char代码。 默认值为0

如果你比较N> S,你会得到78> 83 => true

对于完整的String,Javascript计算所有ASCII字符代码的总和。 所以我可以回答你的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM