相等运算符(==)和等同运算符(===) ===运算符是等同运算符,它采用严格的同一性定义检测两个运算数是否完全等同。==运算符是相等运算符,它采用比较宽松的同一性定义(即允许进行类型转换)检测两个运算数是否相等。 下面的规则用于判定===运算符比较的两个值是否完全相等: 1.如果两个值的类型不同,它们就不相同。 2.如果两个值的类型是数字,而且值相同,那么除非其中一个或者两个都是NaN(这种情况它们不是等同的),否则他们是等同的。值NaN永远不会与其他的任何值等同,包括它自身。 3.如果两个值都是字符串,而且在串中的同一位置上的字符完全相同,那么它们就完全等同。如果字符串的长度或内容不同,它们就不是等同的。 4.如果两个值都是布尔值true,或者两个值都是布尔值false,那么它们等同。 5.如果两个值引用的是同一个对象,数组或函数,那么它们完全等同。如果它们引用的是不同的对象(数组或函数),它们就不完全等同,即使这两个对象具有完全相同的属性或两个数组具有完全相同的元素。 6.如果两个值都是null或都是undefined,它们完全相同。 下面的规则用于判定==运算符比较的两个值是否相等: 1.如果两个值具有相同的类型,那么就检测它们的等同性。如果这两个值完全相同,它们就相等。如果它们不完全相同,则它们不相等。 2.如果两个值的类型不同,它们仍然可能相等。用下面的规则和类型转换来检测它们的相等性: 2.1 如果一个值是null,另一个值是undefined,它们相等。 2.2 如果一个值是数字,另一个值是字符串,把字符串转换为数字,再用转换后的值进行比较。 2.3 如果一个值是true,将它转换成1,再进行比较。如果一个值为false,把它转换成0,再进行比较。 2.4 如果一个值是对象,另一个值是数字或者字符串,将对象转换成原始类型的值,再进行比较。 2.5 其他的数值组合是不相等的。