对于抽象相等”==“和严格相等“===”-------------浅谈

抽象相等:==也称非严格相等,简单来说就是只管值,而不管类型
严格相等:===也称完全相等,简单来说就是即管值,又管类型

抽象相等规则:
1,若Type(x)与Type(y)相同, 则
若Type(x)为Undefined, 返回true。
若Type(x)为Null, 返回true。
若Type(x)为Number, 则
若x为NaN, 返回false。
若y为NaN, 返回false。
若x与y为相等数值, 返回true。
若x 为 +0 且 y为−0, 返回true。
若x 为 −0 且 y为+0, 返回true。
示例:

        console.log("1.1=" + (undefined == undefined));//true
		console.log("1.2=" + (null == null));//true
		console.log("1.3.1=" + (NaN == 1));//false
		console.log("1.3.2=" + (1 == NaN));//false
		console.log("1.3.3=" + (1 == 1));//true
		console.log("1.3.4/5=" + ((-0) == (+0)));//true

2,若Type(x)为String, 则当x和y为完全相同的字符序列(长度相等且相同字符在相同位置,不需要管双方的类型是否相等)时返回true。 否则, 返回false。

var str = new String("1");
console.log("2=" + (str == "1"));//true

3,若Type(x)为Boolean, 当x和y为同为true或者同为false时返回true。 否则, 返回false。
4,当x和y为引用同一对象时返回true。否则,返回false。

var obj = {}
console.log(obj.constructor.prototype == Object.getPrototypeOf(obj));//true

5,若x为null且y为undefined, 返回true。
6,若Type(x) 为 Number 且 Type(y)为String, 返回comparison x == ToNumber(y)的结果。
7,若Type(x) 为 String 且 Type(y)为Number,
返回比较ToNumber(x) == y的结果。
8,若Type(x)为Boolean, 返回比较ToNumber(x) == y的结果。
9,若Type(y)为Boolean, 返回比较x == ToNumber(y)的结果。
10,若Type(x)为String或Number,且Type(y)为Object,返回比较x == ToPrimitive(y)的结果。
11,若Type(x)为Object且Type(y)为String或Number, 返回比较ToPrimitive(x) == y的结果。
返回false。

严格相等规则:
1,如果 Type(x) 与 Type(y) 的结果不一致,返回 false,否则
2,如果 Type(x) 结果为 Undefined,返回 true
3,如果 Type(x) 结果为 Null,返回 true
4,如果 Type(x) 结果为 Number,则
5,如果 x 为 NaN,返回 false
6,如果 y 为 NaN,返回 false
7,如果 x 与 y 为同一个数字,返回 true
8,如果 x 为 +0,y 为 -0,返回 true
9,如果 x 为 -0,y 为 +0,返回 true
10,如果 Type(x) 结果为 String,如果 x 与 y 为完全相同的字符序列(相同的长度和相同的字符对应相同的位置),返回 true,否则,返回 false
11,如果 Type(x) 结果为 Boolean,如果 x 与 y 都为 true 或 false,则返回 true,否则,返回 false
12,如果 x 和 y 引用到同一个 Object 对象,返回 true,否则,返回 false

推荐网址:http://lzw.me/pages/ecmascript/#204

猜你喜欢

转载自blog.csdn.net/h1234561234561/article/details/86697514