JS 空对象和空数组真假判断

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

“假值”总共只有6个:
false,undefined,null,0,""(空字符串),NaN
除此之外的所有值,都是“真值”,即在逻辑判断中可以当true来使用

//  原因分析:if ([]) {} 里发生自动类型转换,[] => Boolean,从object到布尔型,结果是true。事实上,所有的object转型到Boolean,都是true,[]和{}都是对象。
//    [] == true 里不发生自动类型转换,这条语句只比较左右的“值”是否相等,所以要先化为number类型,true转化为数字1就不用说了,主要分析一下[]怎么转化为0的,
//    这里涉及到ToPrimitive方法的操作. []会先调用valueOf方法,返回数组本身不是原始值,所以继续调用toString方法,返回' ',从而Number(' ')=0,而0!=1,所以返回false。

// 总结:Boolean([]) => true;//直接作条件
//    Boolean(Number([])) => false;//当与布尔值做比较时
//    Number({})//NaN,不等于任何数包括自己


// ToPrimitive()

// 应用场景:在JavaScript中,如果想要将对象转换成基本类型时,也就是所谓的拆箱时,会调用toPrimitive()。

// 函数结构:toPrimitive(input,preferedType?)

// 参数解释:

// input是输入的值,即要转换的对象,必选;

// preferedType是期望转换的基本类型,他可以是字符串,也可以是数字。选填,默认为number;

// 执行过程:

// 如果转换的类型是number,会执行以下步骤:

// 1. 如果input是原始值,直接返回这个值;

// 2. 否则,如果input是对象,调用input.valueOf(),如果结果是原始值,返回结果;

// 3. 否则,调用input.toString()。如果结果是原始值,返回结果;

// 4. 否则,抛出错误。

// 如果转换的类型是String,2和3会交换执行,即先执行toString()方法。

// 你也可以省略preferedType,此时,日期会被认为是字符串,而其他的值会被当做Number。


// valueOf()

// valueOf()函数用于返回指定对象的原始值。
// 该方法属于Object对象,由于所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法。
// 语法:object.valueOf( )
// 返回值
// valueOf()函数返回指定对象的原始值。
// JavaScript的许多内置对象都重写了该函数,以实现更适合自身的功能需要。因此,不同类型对象的valueOf()方法的返回值和返回值类型均可能不同。

//  对象	    返回值
// Array	    数组实例对象。
// Boolean	  布尔值。
// Date	      以毫秒数存储的时间值,从 UTC 1970 年 1 月 1 日午夜开始计算。
// Function	  函数本身。
// Number	    数字值。
// Object	    对象本身。这是默认设置。
// String	    字符串值。


// toString()

// toString()函数用于将当前对象以字符串的形式返回。
// 该方法属于Object对象,由于所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法。
// 语法         object.toString( )
// 返回值       toString()函数的返回值为String类型。返回当前对象的字符串形式。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
是的,作为条件表达式时,值(None、False、0、字符串等)和迭代对象都等价于False,非值和非迭代对象都等价于True。 在Python中,if语句、while语句、布尔运算符等都可以用来判断一个值或表达式的真假。当一个值或表达式作为条件表达式时,Python会自动将其转换为布尔值,值和迭代对象会被转换为False,非值和非迭代对象会被转换为True。 例如,下面的代码演示了值和迭代对象作为条件表达式的使用: ``` # 值作为条件表达式 if None: print("不会执行") else: print("值等价于False") # 字符串作为条件表达式 if "": print("不会执行") else: print("字符串等价于False") # 列表作为条件表达式 if []: print("不会执行") else: print("列表等价于False") # 元组作为条件表达式 if (): print("不会执行") else: print("元组等价于False") # 字典作为条件表达式 if {}: print("不会执行") else: print("字典等价于False") # 集合作为条件表达式 if set(): print("不会执行") else: print("集合等价于False") # 迭代器作为条件表达式 if iter([]): print("不会执行") else: print("迭代器等价于False") ``` 可以看出,值和迭代对象都被转换为False,输出了"值等价于False"、"字符串等价于False"、"列表等价于False"、"元组等价于False"、"字典等价于False"、"集合等价于False"和"迭代器等价于False"。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值