关于字符串我们可能遗忘的东西

最近在我们的项目中修改设置门限的动态获取的时候,前端代码中发现了这样一个问题 "6">"10"这个判断返回的值是true,当时就惊呆了(其实是关于字符串的一个概念我们忘了);然后不断的尝试

举例

当我们看见的字符串是两个数字之间作比较的时候,人为的会带入数学的思想从而忘记字符串的特性;我们在js中看见“>,<,==.....”这些运算符的时候往往都会想起运算符的特性(比较大小,js中的隐式类型转换);以上就是我造成错误的原因;

字符串之间比较大小,其实是 取决于,第一个比的字符串的长度来进行比较"6"和“10”,“6”长度是1,而“10”的长度是2,因为运算符(“>”且两边都是字符串)的左边只有1位,那么右边也支取第一位做比较那么就会变成"6">"1";答案为true;

同理var a ="2018-08-08";var b ="2018-09-09"; a和b做比较他们也会遵循这个道理;长度一致那么他们就一位一位的比较大小,a > b为false;a < b 为true

在举个例子 var a="a11", b="a2";字符串之间有字母了,那么同理比较长度后,从第一位开始比较比较字母之间大小他会自动转化为a所对应的charCode,a[0]="a", b[0]="a",他们 charCode 相等,所以比较下一个。a[1]="1", b[1]="2", 1 charCode 是 49,2 是 50 ,所以 a[1] 小于 b[1];

最后console.log('选择'>'努力');他的答案是什么呢?

答案是true;因为 "选" 的 charCode 是 36873,"努" 的 charCode 是 21162

你可能感兴趣的:(关于字符串我们可能遗忘的东西)