为什么js里"10000"<"8000"为true

如题,js不是弱类型语言么,字符串相减不应该自动转换为数字类型运算么

阅读 3.9k
7 个回答

如果两个数字型的字符串相减,或者其中一个为字符串时,那么会自动转换为数字类型的进行运算:

'10000' - '8000' // 2000
10000 - '8000' // 2000
10000 > '8000' // true

但如果是两个都是数字型的字符串进行比较,那就不会自动转换为数字类型,会按照纯字符串的比较规则进行比较:

从字符串左边开始,一次比较每个字符(比较每个字符对应的ASCII值),直接出现差异、或者其中一个串结束为止

比如 '10000' 和 '8000' 这两个字符串比较, 字符'8'对应的ASCII值比字符'1'对应的ASCII值要大,则比较直接结束,最后的结果则是'8000'>'10000'

比较第一个字符的unicode编码值,第一个字符要是相同,就比较第二个,依次往下

这明明就是俩字符串,当然要按照字符串比较的操作去搞了。
这就是完全不涉及到类型转换的字面量。

小于号不是运算符,运算符是加减乘除,你这个是比较符

新手上路,请多包涵

"10000" 和"8000" 比较的是对应的ASCII码对应的大小,你要知道哪些能运算那些不能运算。

推荐问题
宣传栏