编辑:我将改述我的问题,我输入数字<字符串,它返回true,当我执行typeof(2)<时也可以typeof运算( “2”)。
Number < String => true
typeof(2) < typeof("2") => true
我猜测它是Number和String中每个字母的ASCII字符的值,但我不确定这是否是返回true的原因,我想知道为什么会发生这种情况,是什么过程或者如何解释器能得到这个结果吗?
答案 0 :(得分:5)
第一个回答:
charCodeAt()方法返回给定索引处字符的数字Unicode值。阅读here
现在,如果您未指定任何索引位置,则会考虑第0个索引处的字符。现在,S
ASCII值为83
,N
ASCII值为78
。所以,你得到的那些号码。检查here。
78 < 83 => true
很明显。
尝试"String".charCodeAt(1)
,您将获得116
,其值为t
的
<小时/> 基于OP编辑问题的第二个答案:
坦率地说,您的比较Number < String
在技术上是“不正确”,因为Less-than Operator <
或任何类似的运算符用于表达式,而Number
和String
是函数,不是表达。但 @Pointy 解释了Number < String
的工作方式,并为您提供了结果。
<
之类的比较运算符适用于表达式,读取here。通常,您应该具有RHS和LHS的有效表达式或已解析值。
现在这是表达式的定义,阅读更多here - “表达式是解析为值的任何有效代码单元。从概念上讲,有两种类型的表达式:分配一个表达式变量的值和仅具有值的变量。“
因此,(x = 7) < (x = 2)
或new Number() < new String()
是“技术上”有效/良好的比较,即使是Object.toString < Number.toString()
,但实际上不是Object < Function
。
以下是比较的规则/功能,请阅读更多here
答案 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字符代码的总和。 所以我可以回答你的问题。