宽松等于的情况下,有布尔值的情况需要注意的地方

==在js中一般都不会使用,一般情况下我们会使用===严格相等。今天看《你不知道的js》--中卷--第四章的时候,发现书中讲解了关于==的情况。特别是在一方为布尔类型的情况下特别有意思。

先看下放例子:

let str = '42';
console.log(str == true);  // false
console.log(str == false); // false

如果我们从布尔类型的角度看,可能会理解为变量str既不是真值也不是假值。其实不然。

js规范中这样规定布尔值比较的:

如果 Type(x)是布尔值,则返回ToNumer(x) == y的结果
如果 Type(y)是布尔值,则返回 x == ToNumber(y) 的结果。
用一句话说就是,如果存在布尔值的情况下,会首先将布尔值转为对应的number类型,在进行比较。如果比较的类型时number类型,会直接进行比较,如果是其他类型,则会发生强制类型转换。

根据规定,其实上面例子中的情况是这样子的:

let str = '42';
console.log(str == Number(true));
console.log(str == Number(false));

首先会把布尔值true或者false转为number类型,值为1或者0。接下来会发生强制类型转换,比较 42 == 1 或者 42 == 0。这两种情况都是返回false的。

所以我们在判断条件中,不要出现以下结果

let xx = '66';
if(xx == true){
  console.log('不会进入该判断条件内');
}
if(xx == false){
  console.log('不会进入该判断条件内');
}

// 最好写成如下形式
if(!!xx){
  console.log('会进入该判断条件内');
}
if(Boolean(xx)){
  console.log('也会进入该判断条件内');
}

接下来在看看下面的情况:

console.log("0" == false); // true
console.log(0 == false); // true
console.log("" == false); // true
console.log([] == false); // true
console.log({} == false);; // false

根据规定,前三种我们都知道什么结果

主要看一下对象和数组的情况下的结果。

js的基本类型有包装对象,这点都比较清楚,和包装对象相对应的是拆封。

[] == false;

上面代码的操作过程,其实是先让[]执行valueOf以及toString()方法,在和false进行比较。

console.log([].valueOf(),[].toString()); // [], '''
// 相当于是 '' == false 的比较
console.log({}.valueOf(), {}.toString()); // '[object Objecet]'
// 相当于是 '[object Objecet]' == false 的比较。所以返回false

转载于:https://www.cnblogs.com/chinabin1993/p/10569952.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
直接插入排序是一种简单的内部排序算法,其基本思想是将待排序的数据分为两部分,一部分是已排好序的数据,另一部分是待排序的数据,然后将待排序的数据逐个插入到已排好序的数据中,直至所有数据都排好序为止。 在实现直接插入排序算法时,需要注意以下几点: 1. 数组下标的边界问题:在实现直接插入排序算法时,需要注意数组下标的边界问题,以免出现越界的情况。 2. 数据移动的效率问题:在实现直接插入排序算法时,需要注意数据移动的效率问题。每次插入一个数据时,需要将已排好序的数据逐个向后移动,这样会导致算法的时间复杂度增加。因此,可以采用一些优化策略,例如使用哨兵、减少数据移动等方式提高算法的效率。 3. 稳定性问题:直接插入排序算法是稳定的,也就是说,在排序过程中相同元素的相对位置不会发生改变。因此,在实现直接插入排序算法时,需要保证算法的稳定性,以便得到正确的排序结果。 4. 对数据的要求:直接插入排序算法适用于数据量比较小的情况,如果数据量较大,则需要采用其他更高效的排序算法。此外,直接插入排序算法对数据的要求比较宽松,不需要数据具有任何特殊的结构。 总之,在实现直接插入排序算法时,需要注重算法的细节,以便提高算法的效率和正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值