if(this.curUpdatePlanObj.totalPlanHour < this.curUpdatePlanObj.courseOccuHour) {
this.$eleMessage.error("当前训练课时不能大于训练总时长");
return false
}
if(Number(this.curUpdatePlanObj.totalPlanHour) < Number(this.curUpdatePlanObj.courseOccuHour)) {
this.$eleMessage.error("当前训练课时不能大于训练总时长");
return false
}
totalPlanHour 和 courseOccuHour 都是字符串类型
第一反应,纳尼,‘58’ 小于 ‘6’ 是什么鬼,它们不会隐式转换为数字,然后再比较吗?
根据参考文章, 得出结论, 相同类型之间,比较时不会做隐式转换
隐式转换规则
那么字符串之间是怎么比较值的呢?
是通过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
得出结论:
例子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
得到结论: