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类型。返回当前对象的字符串形式。