为什么数字<字符串在JavaScript中返回true
Why does Number < String returns true in JavaScript?
EDIT:我将重新表述我的问题,我键入Number<字符串,它返回true,当我执行typeof(2)<typeof("2")。
Number < String => true
typeof(2) < typeof("2") => true
我猜这是Number和String中每个字母的ASCII字符的值,但我不确定这是否是返回true的原因,我想知道为什么会发生这种情况,是什么过程或解释器如何得到这个结果?
第一个答案:
charCodeAt()方法返回给定索引处字符的Unicode数值。阅读此处
现在,如果不指定任何索引位置,则会考虑第0个索引处的字符。现在,S
ASCII值为83
,N
ASCII值为78
。所以,你得到了这些数字。请在此处查看。
CCD_ 5是明显的。
试试"String".charCodeAt(1)
,你会得到116
,它是t
的ASCII值
基于OP编辑问题的第二个答案:
坦率地说,你的比较Number < String
在"技术上"是不正确的,因为小于运算符<
或任何类似的运算符适用于表达式,而Number
和String
是函数而不是表达式。然而@Pointy解释了Number < String
的工作原理并给出了结果。
关于比较运算符的更多见解
像<
这样的比较运算符适用于表达式,请阅读此处。通常,应该为RHS和LHS提供一个有效的表达式或解析值。
现在这是表达式的定义,请在此处阅读更多信息-"表达式是解析为值的任何有效代码单元。从概念上讲,有两种类型的表达式:为变量赋值的表达式和只具有值的表达式。"
因此,(x = 7) < (x = 2)
或new Number() < new String()
是一个"技术上"有效/良好的比较,即使是这个Object.toString < Number.toString()
,但实际上不是Object < Function
。
以下是用于比较的规则/功能,请在此处阅读更多
- 当两个字符串具有相同的字符序列、相同的长度和相应位置的相同字符时,它们是严格相等的
- 当两个数字在数字上相等(具有相同的数值)时,它们是严格相等的。NaN不等于任何东西,包括NaN。正零和负零彼此相等
- 如果两个布尔操作数都为true或都为false,则这两个操作数严格相等
- 无论是严格的比较还是抽象的比较,两个不同的对象都不相等
- 只有当操作数引用同一Object时,比较Object的表达式才为true
- Null类型和未定义类型本身严格相等,并且抽象地彼此相等
的结果
Number < String
是不是比较字符串"Number"answers"String"的结果,或者不是确切地。它是比较从Number.toString()
和String.toString()
返回的字符串的结果。这些字符串(在我所知道的所有运行时中)中的内容将不仅仅是字符串"Number"answers"String",但这两个子字符串将是它们不同的第一个地方。
您可以通过键入来查看这些实际字符串是什么
Number.toString()
在浏览器控制台中。
JavaScript执行以下操作:
"String".charCodeAt(); => 83
"S".charCodeAt(); => 83
"String".charCodeAt(0); => 83
方法charCodeAt(a)从位置a获取字符代码。默认值为0
如果你比较N>S,你会得到78>83=>真
对于完整的字符串,Javascript计算所有ASCII字符代码的总和。所以我可以肯定地回答你的问题。
- Javascript返回值只在循环中返回一次
- ascii输入键通过firefox中的javascript返回0
- 从函数JavaScript返回不可变数组/对象
- 使用在函数外部声明的变量的 Javascript 返回值 + undefined
- 如何在Android中将Javascript返回值转换为String
- Javascript返回错误的Date值(NodeJS)
- JavaScript:返回对象的函数
- 使用javascript返回
- JavaScript返回奇数
- JavaScript:返回NaN(第2部分)
- 是我的第三方JavaScript返回html还是只是一个空对象
- 如何从javascript返回输出json
- Javascript:返回对象
- 当我将参数设置为对象时,JavaScript返回TypeError
- 获取页面宽度Javascript-返回PHP变量
- 使用纯JavaScript返回并嵌入图像,如php
- 为什么 javascript 返回对象位置 true 或 false
- JavaScript - 返回承诺和/或调用回调
- 将 javascript 返回值插入 html
- Javascript 返回 OR(||) 操作的字符串