37个 JavaScript 基本面试问题和解答

1、使用typeof bar ===“object”来确定bar是否是一个对象时有什么潜在的缺陷?这个陷阱如何避免?

尽管typeof bar ===“object”是检查bar是否是对象的可靠方法,但JavaScript中令人惊讶的问题是null也被认为是一个对象!

因此,对于大多数开发人员来说,下面的代码会将真实(而不是错误)记录到控制台:

只要知道这一点,就可以通过检查bar是否为空来轻松避免该问题:

为了在我们的答案更加的完整,还有两件事值得注意:

首先,如果bar是一个函数,上面的解决方案将返回false。在大多数情况下,这是所期望的行为,但是在您希望函数返回true的情况下,您可以将上述解决方案修改为:

其次,如果bar是数组,则上述解决方案将返回true(例如,如果var bar = [];)。在大多数情况下,这是所希望的行为,因为数组确实是对象,但是在您想要对数组也是false的情况下,可以将上述解决方案修改为:

但是,还有一个替代方法对空值,数组和函数返回false,但对于对象则为true:

或者,如果您使用jQuery:

ES5使得数组的情况非常简单,包括它自己的空检查:

2、下面的代码将输出到控制台的是什么,为什么?

由于a和b都在函数的封闭范围内定义,并且由于它们所在的行以var关键字开头,因此大多数JavaScript开发人员