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

San*_*rez 2 javascript

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

Number < String => true
typeof(2) < typeof("2") => true
Run Code Online (Sandbox Code Playgroud)

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

hag*_*wal 5

第一个答案:

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

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

而且78 < 83 => true很明显.

尝试"String".charCodeAt(1),你会得到116哪个是ASCII值t


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

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

更深入地了解比较运算符

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

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

所以,(x = 7) < (x = 2)或者new Number() < new String()是"技术上"有效/良好的比较,即便如此,Object.toString < Number.toString()但实际上并非如此Object < Function.

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

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

  • 这或多或少是一个很好的答案,但我不确定它是实际问题的答案.OP正在推测正在进行字符代码比较,这是正确的,但运行时内部实际上涉及在比较字符串时调用`.charCodeAt()`的想法似乎不太可能. (2认同)