30K面试必考!两张图搞定“类型转换”和“运算规则”!全网最管用!

103 阅读2分钟

最近在刷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);

这种类型的题,属于“会的人全会,忘的人全忘”。不同于闭包、原型链这种逻辑性更强的知识点,类型转换与运算规则属于记忆点更加密集、逻辑性相对偏弱的知识点。

对我这种阿兹海默星人来说,把里面零零碎碎的记忆点全记住,臣妾真做不到!

但如果把里面的知识点梳理出来,按逻辑整理好,分分钟就能全部搞定啦,亲测有效!

给各位阿兹海默们整理了两张思维导图,收藏了等于学会了!

JS运算符.png

JS类型转换.png

把上面腾讯的题拿来套一下试试: console.log(0 == "");

首先判断运算符:==和运算符左右两侧的类型,在“JS运算符”导图内进行套用:

JS运算符.jpg

这里得到的结果是“转换成数字比较”,我们需要将空字符串转换成数字,那我们接下来继续看第二张图:

JS类型转换.jpg

我们很快就可以得到结果:空字符串转数字的结果为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()