• JS——数字字符串的比较逻辑分析


    1. 场景复现: ‘58’ 小于 ‘6’
      当总时长 小于 训练课时,提示当前训练课时不能大于训练总时长,
    if(this.curUpdatePlanObj.totalPlanHour < this.curUpdatePlanObj.courseOccuHour) {
      this.$eleMessage.error("当前训练课时不能大于训练总时长");
      return false
    }
    
    1. 解决方案: 将字符串类型转换数字类型,再做比较
    if(Number(this.curUpdatePlanObj.totalPlanHour) < Number(this.curUpdatePlanObj.courseOccuHour)) {
      this.$eleMessage.error("当前训练课时不能大于训练总时长");
      return false
    }
    
    
    1. totalPlanHour 和 courseOccuHour 都是字符串类型
      第一反应,纳尼,‘58’ 小于 ‘6’ 是什么鬼,它们不会隐式转换为数字,然后再比较吗?

    2. 根据参考文章, 得出结论, 相同类型之间,比较时不会做隐式转换
      隐式转换规则

    3. 那么字符串之间是怎么比较值的呢?
      是通过ASCLL 表转码,首选把 字符转换对应的数字,然后再比较数字,最后返回结果
      详情可以看 ASCll码表
      在这里插入图片描述
      例子1:

    let a = '6';
    let b = '8';
    
    console.log(b < a ? true : false)
    false
    实际转码后对比如下
    let a = '6';  // 字符6 根据十进制  数字是54
    let b = '8';  // 字符8 根据十进制  数字是56
    console.log(56 < 54 ? true: false);
    false
    

    得出结论: 字符串数字 是通过 ASCll 码 找到对应数字,再比较数字返回结果。

    例子2:

    let a = '58';
    let b = '6';
    
    if (a < b) {
        console.log('a小于b');
    } else {
        console.log('a大于b');
    }
    a小于b
    实际转码后对比如下
    let a = '58';  // 第一个字符是5,  根据十进制, 数字是53
    let b = '6';  // 第一个字符是6, 根据十进制,数字是54
    if (53 < 54) {
        console.log('a小于b');
    } else {
        console.log('a大于b');
    }
    a小于b
    

    得出结论: 当字符串数字有多位数时,默认比较第一个字符串对应数值

    例子3:

    let a = '68';
    let b = '6';
    
    if (a < b) {
        console.log('a小于b');
    } else {
        console.log('a大于b');
    }
    a大于b
    实际转码后对比如下
    let a = '68';  // 第一个字符是6,根据十进制, 数字是54
    			   // 第二个字符是8, 根据十进制, 数字是56
    let b = '6';   // 第一个字符是6,根据十进制, 数字是54
    			   // 第二个字符是空字符, 根据十进制,数字是0
    
    if (56 < 0) {
        console.log('a小于b');
    } else {
        console.log('a大于b');
    }
    a大于b
    

    得出结论:

    1. 当第一个字符相等时,再次比较第二个字符 对应的数值
    2. 当第二个字符没有时,默认为空字符, 对应数值是0

    例子3:

    let a = '1';
    let b = 'a';
    
    if (a < b) {
        console.log('a小于b');
    } else {
        console.log('a大于b');
    }
    a小于b
    实际转码后对比如下
    let a = '1';   // 第一个字符是1,根据十进制, 数字是49
    let b = 'a';   // 第一个字符是a,根据十进制, 数字是97
    
    if (49 < 97) {
        console.log('a小于b');
    } else {
        console.log('a大于b');
    }
    a小于b
    

    得到结论:

    1. 字符串之间的比较最终是ASCII码对应的数值的比较, 跟字符串本身的字符没有关系
  • 相关阅读:
    C++&QT day7
    C# WPF 开发一个 Windows 动态屏保软件
    关于minizip-ng无法解压unix下压缩的带有文件夹的zip文件
    Centos系统上安装包(软件)时常用的命令wget、rpm、yum分别是什么意思和作用?
    Redis之List命令
    CSS元素的显示模式
    微信小程序_20,使用第三方npm包
    分享几招教会你怎么给图片加边框
    JavaScript高级知识-ES5~6
    GCC编译
  • 原文地址:https://blog.csdn.net/m0_37616866/article/details/127103942