We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
对的你没看错,这是道很基础的面试题,昨天刚好面试到了,没答上出来。
直接说答案吧,返回是true
true
如果你看《Javascript权威指南第6版》的话,从75-76页里面关于==的转换
上图的意思就是
if (两个操作数的类型是相同){ 同严格相等的比较规则一样(以下文会解释严格相等的比较规则) } else if(两个操作数的类型不相同){ if(null == undefined) { return true; }else if(a是数字,b是字符串){ 将字符串转换为数字,然后使用转换后的值进行比较。 }else if(两个值中有一个是true的话){ 将其转换为1再进行比较 }else if(两个值中有一个是false的话){ 将其转换为0再进行比较 }else if(如果一个值是对象,另一个值是数字或字符串){ 将对象转换为原始值,转换规则在《Javascript权威指南第6版》书52页已经说明,下文具体说到对象转换为原始值的步骤 } } 复制代码
if (两个操作数的类型是相同){ 同严格相等的比较规则一样(以下文会解释严格相等的比较规则) } else if(两个操作数的类型不相同){ if(null == undefined) { return true; }else if(a是数字,b是字符串){ 将字符串转换为数字,然后使用转换后的值进行比较。 }else if(两个值中有一个是true的话){ 将其转换为1再进行比较 }else if(两个值中有一个是false的话){ 将其转换为0再进行比较 }else if(如果一个值是对象,另一个值是数字或字符串){ 将对象转换为原始值,转换规则在《Javascript权威指南第6版》书52页已经说明,下文具体说到对象转换为原始值的步骤 } }
}
复制代码
综合上文所说,[]=='' 属于最后一种情况.
直接将对象转成true 复制代码
if(对象具有tostring()方法){ 如果返回一个原始值,javascript将这个值转换为字符串,并返回这个字符串结果。 }else if(对象具有valueOf()方法){ 会调用valueOf()方法.将其结果返回 }else{ 抛出异常 } 复制代码
if(对象具有valueOf()方法){ 会调用valueOf()方法.将其结果返回 }else if(对象具有tostring()方法){ 如果返回一个原始值,javascript将这个值转换为字符串,并返回这个字符串结果。 }else{ 抛出异常 } 复制代码
注意对于空数组以及单个元素的数组会转换成一个数字。数组继承了默认的valueOf()方法,这个方法返回一个对象而不是一个原始值,因此数组到数字的转换则调用toString()方法。空数组转换成为空字符串,空字符串转换成为数字0.——来自《javascript权威指南》第55页。
上图的意思是
if (两个值类型不相同){ return false; } else if(null/undefined/true/false){ return true }else if(两个值其中之一为NaN){ return false; }else if(两个值都为数值且值相等){ return true; }else if(两个值都为字符串且值相等 ){ return true; }else if(两个值都指向同一个引用类型 ){ return true; } 复制代码
123 == 123; //true '123' == 123; //true,'123'会转成成数值123 false == 0; //true,false 转成数值就是0 'a' == 'A'; //false,转换后的编码不一样 123 == {}; //false,valueOf()会改变 123 == NaN; //false,只要有NaN,都是false {} == {}; //false,比较的是他们的地址,每个新创建对象的引用地址都不同 null == undefined //true 'NaN' == NaN //false 123 == NaN //false NaN == NaN //false false == 0 //true true == 1 //true true == 2 //false undefined == 0 //false null == 0 //false '123' == 123 //true '123' === 123 //false 复制代码
123 == 123; //true '123' == 123; //true,'123'会转成成数值123 false == 0; //true,false 转成数值就是0 'a' == 'A'; //false,转换后的编码不一样 123 == {}; //false,valueOf()会改变 123 == NaN; //false,只要有NaN,都是false {} == {}; //false,比较的是他们的地址,每个新创建对象的引用地址都不同 null == undefined //true 'NaN' == NaN //false 123 == NaN //false NaN == NaN //false false == 0 //true true == 1 //true true == 2 //false undefined == 0 //false null == 0 //false '123' == 123 //true '123' === 123 //false
null == undefined //true 'NaN' == NaN //false 123 == NaN //false NaN == NaN //false false == 0 //true true == 1 //true true == 2 //false undefined == 0 //false null == 0 //false '123' == 123 //true '123' === 123 //false
《javascript权威指南》
温故js系列(9)-相等==&严格相等===&代码里的那些判断
The text was updated successfully, but these errors were encountered:
No branches or pull requests
对的你没看错,这是道很基础的面试题,昨天刚好面试到了,没答上出来。
[]==''返回?
直接说答案吧,返回是
true
为什么?
如果你看《Javascript权威指南第6版》的话,从75-76页里面关于==的转换
上图的意思就是
综合上文所说,[]=='' 属于最后一种情况.
对象转换为原始值步骤
注意对于空数组以及单个元素的数组会转换成一个数字。数组继承了默认的valueOf()方法,这个方法返回一个对象而不是一个原始值,因此数组到数字的转换则调用toString()方法。空数组转换成为空字符串,空字符串转换成为数字0.——来自《javascript权威指南》第55页。
严格相等的比较规则
上图的意思是
常见的==比较例子
结论:
[]=='',首先操作的是将[]转转换成空字符串,空字符串再转换成数字0,0再跟‘’比较,将''转成0,所以最终返回的是true
参考资料
《javascript权威指南》
温故js系列(9)-相等==&严格相等===&代码里的那些判断
The text was updated successfully, but these errors were encountered: