1严格相等运算(===)时和!==时,首先会计算操作符的值,然后比较这两个值(即使类型不一致也不会进行转换,两个值的类型不一致时则不相等)。
2,相等运算符(==)和!=时,它的比较并不严格,当操作数的类型一致时,它会按照严格相等的规则进行比较,但当操作数的类型不一致时,它会尝试进行类型转换(隐式转换)。

(1).一个是null,一个是undefined时,则相等;

(2).一个值是字符串,一个值是数字时,会首先将字符串转换为数字,然后用转换之后的值进行比较

(3).如果其中的一个操作数为true或false,则会将其先转换为1或0再比较;

(4).如果一个值为对象,另一个值为数字或是字符串,则会先将对象转换为原始值,再进行比较

(5).其它不同类型之间的比较均为不相等。

个人说明:从上面可以看出==和!=是不严谨的,在比较过程中会出现差错。所以很多人得到这样的结论。

绝大多数场合应该使用 === ,只有检测 null/undefined 的时候可以使用 x == null ,因为通常我们不区分 null 和 undefined ,即将 x == null 作为 x === null || x === undefined 的缩写。
这样的说法很对。但是在我看来如果我们知道了==和!=的转换过程化,其实它们还可以用作更多的地方。没必要一棒子打死。如果我们知道两个值类型,一个是字符串,一个是数字时。其实也是可以使用==和!=的。但如果其中一个为布尔值或者为对象时,就不建议使用==和!=了。