Js ==和===的区别

时间:2022-11-26 08:28:40

===判断:

Undefined === Undefined,返回 true

Null === Null,返回 true

null == undefined,返回 false

NaN === NaN,返回 false (其中typeof NaN : Number)

+0 === -0,返回 true

如果左右引用的是同一个对象,返回 true

==判断:

null == undefined,返回 true

如果x为Number,y为String,返回 x == ToNumber(y) (其中 ToNumber(undefined) == NaN, ToNumber(null) == +0)

如果x为Number,y为Boolean,返回 x == ToNumber(y)

如果x为String或Number,y为Object,返回 x == ToPrimitive(y)

补充:

在JavaScript中,一共有两种类型的值:原始值(primitives)和对象值(objects).原始值有:undefined, null, 布尔值(booleans), 数字(numbers),还有字符串(strings).其他的所有值都是对象类型的值,包括数组(arrays)和函数(functions)。

通过ToPrimitive()将值转换为原始值

ToPrimitive(input, PreferredType?):可选参数PreferredType可以是Number或者String,它只代表了一个转换的偏好,转换结果不一定必须是这个参数所指的类型,但转换结果一定是一个原始值.如果PreferredType被标志为Number,则会进行下面的操作来转换输入的值

  1. 如果输入的值已经是个原始值,则直接返回它.
  2. 否则,如果输入的值是一个对象.则调用该对象的valueOf()方法.如果valueOf()方法的返回值是一个原始值,则返回这个原始值.
  3. 否则,调用这个对象的toString()方法.如果toString()方法的返回值是一个原始值,则返回这个原始值.
  4. 否则,抛出TypeError异常.

如果PreferredType被标志为String,则转换操作的第二步和第三步的顺序会调换.如果没有PreferredType这个参数,则PreferredType的值会按照这样的规则来自动设置:Date类型的对象会被设置为String,其它类型的值会被设置为Number.