if与==中的强制类型转换

if==都会发生强制类型转换

if

if(xx)的含义是判断xx是否为"真值",很好判断,因为"假值"只有6个:

false
undefined
null
0
""     //空字符串
NaN

除此以外的所有值都可以判断为true

非严格相等

可以以一个方式快速判断非严格相等的值,即左右都转化为数字,对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果

  1. 字符串和数字之间的相等比较
var a = 42
var b ='42'
a == b //true
  1. 其它类型与布尔值之间的相等比较
var a = '42'
var b = true
a == b  // false 因为42不等于1
  1. null和undefined之间宽松相等
    ==nullundefined相等(它们也与其自身相等),除此之外的其它值都不存在这种情况
var a = null  //0
var b         //NaN

a == b      // true 
a == null   // true
b == null   // true

a == false  // false
b == false  // false
a == ""     // false
b == ""     // false
a == 0      // false
b == 0      // false
  1. 对象和非对象之间的相等比较
var a = 42
var b = [42]
a == b  // true
  1. 极端情况:
    [] == ![]
    我们先来分析一下:首先![]会被转换为false,变为[] == false,然后[]通过ToPrimitive操作转换为'',即 '' == false,然后false通过ToNumber转换为0,变为'' == 0,最后''通过ToNumber转换为0,变为 0 == 0,结果为true

安全运用隐式强制类型转换

我们要对==两边的值进行认真推敲,一下两个原则可以让我们有效的避免出错。

如果两边的值中有truefalse,千万不要使用==
如果两边的值中有[]''或者0,尽量不要使用==

隐式强制转换在部分情况下确实很危险,为了安全起见就要使用===

你可能感兴趣的:(if与==中的强制类型转换)