'1'>'11','2'>'11'的比较
在网上看了一大堆关于'2'>'11'的解释,大多数都各执一词,其实这里面有挺多知识点的。 首先前者返回的是false,后者返回的是true;很多小伙伴就晕了为啥就差1,比较出来的还不同?'1'>'11'是false我是知道的呀!1本来就比11小所以是错误的。但是这里就涉及到了隐式转换。
隐式转换
首先作为一名开发人员,你肯定知道一些隐式转换的知识。这里我也不过多的赘述。很多同学肯定会想前面的例子会将字符串转换成数值来进行比较。其实这个想法是错误的。 在js中非相等运算符中如果两边都是原始值类型,确实会优先考虑将其转换为数值来进行比较,比如:
5 > '4' // true
// 等同于 5 > Number('4')
// 即 5 > 4
true > false // true
// 等同于 Number(true) > Number(false)
// 即 1 > 0
2 > true // true
// 等同于 2 > Number(true)
// 即 2 > 1
但是如果两侧原始值类型是字符串,JavaScript 引擎内部首先比较首字符的 Unicode 码点。如果相等,再比较第二个字符的 Unicode 码点,以此类推。也就是我们常说的ascall码
所以上面'1'的ascall码对应为49 '2'的ascall码对应为50 '11'的ascall码对应为50。一般都取字符串的第一个字符的ascall码进行对比,如果相同在比较第二个。这样就能解释为一开始的问题了。