全等和相等详解及面试

来源:互联网 发布:微信淘宝客开源系统 编辑:程序博客网 时间:2024/04/30 03:39

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
原创粉丝点击