最近在刷JS面试题时又遇到了这两个老生常谈的问题,这一哆嗦发现一不留神又忘的七七八八了,先来套腾讯面试题感受感受:
console.log(0 == "");
console.log(0 == "0");
console.log(2 == true);
console.log(2 == false);
console.log(false == "false");
console.log(false == "0");
console.log(false == undefined);
console.log(false == null);
console.log(null == undefined);
console.log("\t\r\n " == 0);
这种类型的题,属于“会的人全会,忘的人全忘”。不同于闭包、原型链这种逻辑性更强的知识点,类型转换与运算规则属于记忆点更加密集、逻辑性相对偏弱的知识点。
对我这种阿兹海默星人来说,把里面零零碎碎的记忆点全记住,臣妾真做不到!
但如果把里面的知识点梳理出来,按逻辑整理好,分分钟就能全部搞定啦,亲测有效!
给各位阿兹海默们整理了两张思维导图,收藏了等于学会了!
把上面腾讯的题拿来套一下试试:
console.log(0 == "");
首先判断运算符:==
和运算符左右两侧的类型,在“JS运算符”导图内进行套用:
这里得到的结果是“转换成数字比较”,我们需要将空字符串转换成数字,那我们接下来继续看第二张图:
我们很快就可以得到结果:空字符串转数字的结果为0,所以0 == ''
等同于0 == 0
,结果为true。
按照这个思路,可以很快地把这套题都算出结果,不妨先来试试!
console.log(0 == "");
console.log(0 == "0");
console.log(2 == true);
console.log(2 == false);
console.log(false == "false");
console.log(false == "0");
console.log(false == undefined);
console.log(false == null);
console.log(null == undefined);
console.log(" \t\r\n " == 0);
虽然一开始还是需要参照着导图来做,但其实整理后的规则并不复杂,多做一些题后很快就能记住主要规则了,不管题目怎么变换也丝毫不虚,不信你再来试试:
网易面试题:
null + "1" == null + 1;
(null + 1 == null) == 0;
null == undefined;
null + 1 == undefined + 1;
null + null == undefined + undefined;
新东方面试题:
var obj1 = {
a: 1,
b: 2,
valueOf: function ( ) {
return this.a + this.b;
},
toString: function () {
return 1;
}
}
var obj2 = {
toString: function () {
return 0;
}
}
console.log(obj1 + !!obj2);
是不是轻轻松松啦,带着图多找一些不同的题目多练练,以后想做错都难啦。
下篇预告
给下一篇做个预告,先来看看这道题,如果一脸懵逼的话,留个言让我知道,下次一篇文章帮你搞懂闭包!
function func1(cb) {
var a = 1,
b = 2;
cb(a, b)
}
var a = 11,
b = 22;
function func2() {
var a = 111,
b = 222;
func1(function() {
console.log(a, b);
func3();
})
}
function func3() {
console.log(a, b);
}
func2()