==equality(等同):两边值类型不同的时候要先进行类型转换再比较;
    ===identity(恒等):不做类型转换,类型不同一定不等;

    具体说明:
    下面的规则用来判断两个值是否===(恒等):

    1. 如果类型不同,则不相等;
    2. 如果两个值都是数值类型,并且是同一个值,那么相等;如果其中至少一个是NaN,则不相等(用isNaN()来判断一个值是否是NaN);
    3. 如果两个都是字符串,每个位置的字符都一样,则相等;否则不相等;
    4. 如果两个值都是true,或者都是false,则相等;
    5. 如果两个值都引用同一个对象或函数,则相等;否则不等;
    6. 如果两个值都是null,或者都是undefined,则相等;

    下面的规则用来判断两个值是否==(等同):

    1. 如果两个值类型相同,进行 === 比较;
    2. 如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较:
      1. 如果一个是null,一个是undefined,则相等;
      2. 如果一个是字符串,一个是数值,把字符串转换成数值再进行比较;
      3. 如果任一值是true,把它变成1再比较;如果任一值是false,把它变成0再比较;
      4. 如果一个是对象,另一个是数值或字符串,把对象转换成基本类型的值再比较。对象转换成基本类型,利用它的tostring()或者valueof()。JS内置类,会尝试先调用valueOf()再调用toString; 除了Date类型,Date利用的是toString 转换;
      5. 任何其他组合都不相等;

    举例:

    1. person 是一个对象, person 是一个string:

      1. var person = function(){name:"eric"}
      2. console.log("object: "+person);
      3. var personstr = 'function (){name:"eric"}';
      4. console.log("string: "+personstr);
      5. console.log(" == compare result: "+(person == personstr));
      6. console.log(" === compare result: "+(person === personstr));

      结果:

    JavaScript == 和 ===的区别 - 图1

    1. 一个是1,另一个是true: a =1 , b = true:
    var a = 1;
    var b = true;
    console.log(" == compare result: "+(a == b));
    console.log(" === compare result: "+(a===b));
    

    结果:

    JavaScript == 和 ===的区别 - 图2

    1. 一个是null, 另一个是undefined: a = null, b = undefined
    var a = null;
    var b = undefined;
    console.log(" == compare result: "+(a == b));
    console.log(" === compare result: "+(a===b));
    

    结果:

    JavaScript == 和 ===的区别 - 图3

    1. 一个是字符串,一个是数值: a = “123”, b = 123
            var a = "123";
            var b = 123;
            console.log(" == compare number result: "+(a == b));
            console.log(" === compare number result: "+(a===b));
    

    结果:

    JavaScript == 和 ===的区别 - 图4