==和===

1. == 相等  比较的值  会有隐式类型转换

2. === 全等  比较的是值和数据类型。

  //console.log(1 == "1"); //true

  //console.log(1 === "1"); //false

  //console.log(1 == true); //true

  //console.log(1 === true); //false

  //console.log(null == undefined); //true

  //console.log(null === undefined); //false

  //console.log(NaN == NaN); //false NaN永远不等于其他的值,包括他自身。

变态面试题1

  //console.log([] == ![]); //true

解析

有取反运算,故先算后面的的。

 

  //[] == ![]隐式转换对象,会得到true。
  //[] == !true

  //[] == false   //注意

当一基本类型和一个复杂类型进行比较时会先调用复杂类型的valueOf方法,如果valueOf方法获取的值为空,

会再调用其原型上的toString方法。

  //[].valueOf() == false

值还是[],则调用toString方法

  //[] == false

  //[].toString() == false

console.log([].toString())//"";可检验

console.log(typeof [].toString())//String.

举例说明


  //var arr = [];
  //console.log(arr + 1); //"1"前面得到一个空字符串

故得到

  //"" == false
  //false == false
  //true


注意点

  //如果一个复杂的数据类型和一个基本的数据类型进行运算,会调用这个对象的valueOf方法,取去他的原始值再和这个基本数据类型进行运算.
  //如果valueOf取不到一个值,就调用这个对象的toString方法,得到的值再和这个基本数据类型进行运算。
  //console.log([].valueOf());
  //console.log([].toString());

 

 

 

变态面试题2

 

 

 

console.log({}==!{})//false

解析

  //var obj = {};

  //console.log(obj.valueOf()); //{}
  //console.log(obj.toString()); // "[object Object]"
  //console.log(obj + 1); //"[object Object]1"

{}==!{}//对象取反为false.

{}==false//简单类型和复杂类型比较。。

前面的【object  object】为真

故表达式为false


详细解析:

  //console.log({} == !{}); //false
  //{} == !{}
  //{} == !true
  //{} == false
  //{}.valueOf() == false
  //{} == false
  //{}.toString() == false
  //"[object Object]" == false
  //true == false
  //false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值