严格比较运算符 ===

仅当两个操作数的类型相同且值相等为 true,不做类型转换,比较容易理解

类型转换比较运算符 ==

  1. 当比较数字和字符串时,字符串会转换成数字值。 JavaScript 尝试将数字字面量转换为数字类型的值。 首先, 一个数学上的值会从数字字面量中衍生出来,然后得到被四舍五入后的数字类型的值。
  2. 如果其中一个操作数为布尔类型,那么布尔操作数如果为true,那么会转换为1,如果为false,会转换为整数0,即0。
  3. 如果一个对象与数字或字符串相比较,JavaScript会尝试返回对象的默认值。操作符会尝试通过方法valueOf和toString将对象转换为其原始值(一个字符串或数字类型的值)。如果尝试转换失败,会产生一个运行时错误。
  4. 注意:当且仅当与原始值比较时,对象会被转换为原始值。当两个操作数均为对象时,它们作为对象进行比较,仅当它们引用相同对象时返回true。

比较的特点

  1. 对于两个拥有相同字符顺序,相同长度,并且每个字符的位置都匹配的字符串,应该使用严格比较运算符。
  2. 对于两个数值相同的数字应该使用严格比较运算符,NaN和任何值不相等,包括其自身,正数零等于负数零。
  3. 对于两个同为true或同为false的布尔操作数,应使用严格比较运算符。
  4. 不要使用严格比较运算符或比较运算符来比较两个不相等的对象。
  5. 当比较一个表达式和一个对象时,仅当两个操作数引用相同的对象(指针指向相同对象)。
  6. 对于Null 和 Undefined 类型而言,应使用严格比较运算符比较其自身,使用比较运算符进行互相比较。

补充:Boolean对象

Boolean([value]) value 可选,用来初始化 Boolean 对象的值。

如果第一个参数不是布尔值,则会将其转换为布尔值。
如果省略该参数,或者其值为 0、-0、null、false、NaN、undefined、或者空字符串(""),则生成的 Boolean 对象的值为 false。
如果传入的参数是 DOM 对象 document.all,也会生成值为 false 的 Boolean 对象。
任何其他的值,包括值为 "false" 的字符串和任何对象,都会创建一个值为 true 的 Boolean 对象。

注意不要将基本类型中的布尔值 true 和 false 与值为 true 和 false 的 Boolean 对象弄混了。

当 Boolean 对象用于条件语句的时候(译注:意为直接应用于条件语句),任何不是 undefined 和 null 的对象,包括值为 false 的 Boolean 对象,都会被当做 true 来对待。例如,下面 if 语句中的条件为真:

var x = new Boolean(false);
if (x) {
  // 这里的代码会被执行
}

基本类型的布尔值不受此规则影响。例如下面的 if 语句的条件为假:

var x = false;
if (x) {
  // 这里的代码不会执行
}

zning
242 声望7 粉丝