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

时间:2015-11-24 21:41:15

标签: javascript

编辑:我将改述我的问题,我输入数字<字符串,它返回true,当我执行typeof(2)<时也可以typeof运算( “2”)。

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

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

3 个答案:

答案 0 :(得分:5)

第一个回答:

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

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

78 < 83 => true很明显。

尝试"String".charCodeAt(1),您将获得116,其值为t

<小时/> 基于OP编辑问题的第二个答案:

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

对比较运算符的更深入了解

<之类的比较运算符适用于表达式,读取here。通常,您应该具有RHS和LHS的有效表达式或已解析值。

现在这是表达式的定义,阅读更多here - “表达式是解析为值的任何有效代码单元。从概念上讲,有两种类型的表达式:分配一个表达式变量的值和仅具有值的变量。

因此,(x = 7) < (x = 2)new Number() < new String()是“技术上”有效/良好的比较,即使是Object.toString < Number.toString(),但实际上不是Object < Function

以下是比较的规则/功能,请阅读更多here

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

答案 1 :(得分:4)

的结果
Number < String

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

您可以通过键入

来查看这些实际字符串是什么
Number.toString()

在您的浏览器控制台中。

答案 2 :(得分:1)

JavaScript执行以下操作:

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

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

如果你比较 N&gt; S 你会得到 78&gt; 83 =&gt;真

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