==与===的区别(JS) | 您所在的位置:网站首页 › start与beginning的区别 › ==与===的区别(JS) |
两者都是判断等式两边是否相等,最大的区别就是==会进行类型的转换之后再判断两者是否相等,而===不会进行数据类型的转换,先判断两边的数据类型是否相等,如果数据类型相等的话才会进行接下来的判断,再进行等式两边值得判断,可以理解为只有等式两边是全等(数据类型相同,值相同)的时候结果才会是true,否则全为false。 ==判断等式两边是否相等的情况: (1)null、undefined和不同类型比较,都是false(null和undefined结果为true) (2)NaN和任何数据进行比较,都是false(包括NaN和NaN相比较也为false) (3)布尔值是转换为数字1或0再和其他数据进行比较 拓展: 不同数据转换成布尔值的结果: console.log(Boolean('')); //false console.log(Boolean({})); //true console.log(Boolean([])); //true console.log(Boolean(null)); //false console.log(Boolean(undefined)); //false console.log(Boolean(NaN)); //false console.log(Boolean(Object)); //true(4)数字和其他简单数据类型进行比较时,会尝试将其他数据类型转换成数值型再进行比较 **其他数据类型默认转数字使用的是Number() console.log(""==false); //true console.log(parseInt("")); //NaN console.log(Number("")); //0 console.log(""==0); //true(5)对象和其他简单数据类型进行比较的时候,会尝试使用对象的valueOf()和toString()方法将对象转换为原始值进行比较: ①对象.toString()返回值只有[ object Object ] let obj = { name:'leon', age:18 }; console.log(obj.toString()); //[object Object] console.log(obj.valueOf()); //{name: 'leon', age: 18} let obj = {}; console.log(obj.toString()); //[object Object] console.log(obj.valueOf()); //{}②数组 [ ].toString()返回值是空 其他数组.toString()返回值是字符 ,一个成员一个字符逗号分隔 let arr1=[1,2,3]; console.log(arr1.toString()); //1,2,3 console.log(arr1.valueOf()); //[1, 2, 3] let arr=[]; console.log(arr.toString()); //空 console.log(arr.valueOf()); //[]③其他的对象function reg 返回字符串 function fn(){ console.log("你是最棒的!"); } console.log(fn.toString()); console.log(fn.valueOf()); let reg = /^[^_$]\w{5,}@(163|126|qq|sina)\.(com|cn|net)$/; console.log(reg.toString()); console.log(reg.valueOf());运行结果截图: (6)两者同为引用类型时,必须是指向同一个引用地址才相等,否则不相等 (7)-0 == +0 结果为:true 全等比较(===)不转换数据类型,数据类型和内容必须完全一致才是相等 全等比较(===)两边是否相等的情况: (1)类型不同,一定不相等 (2)两个同为数值,并且相等,则相等;若其中一个为NaN,一定不相等 (3)两个都为字符串,每个位置的字符都一样,则相等 (4)两个同为true,或是false,则相等 (5)两个值都引用同一个对象或函数,则相等,否则不相等(引用类型地址空间可能不一样) (6)两个值都为null,或undefined,则相等 (7*)两者同为引用类型时,必须是指向同一个引用地址才相等,否则不相等(5的补充) (8)-0 === +0 结果为:true |
CopyRight 2018-2019 实验室设备网 版权所有 |