首页 存档 技术 查看内容

每个前端开发者必会的 20 个 JavaScript 面试题

2018-3-30 13:00 |来自: 互联网 312 0

摘要: 官方微博:动力节点 问题1:JavaScript 中undefined和not defined的区别 JavaScript 未声明变量直接使用会抛出异常:var name is not defined,如果没有处理异常,代码就停止运行了。 但是,使用typeof undeclared_ ...

官方微博:动力节点


问题1:JavaScript 中undefined和not defined的区别


JavaScript 未声明变量直接使用会抛出异常:var name is not defined,如果没有处理异常,代码就停止运行了。


但是,使用typeof undeclared_variable并不会产生异常,会直接返回undefined。



问题2:下面的代码输出什么?



正确的答案应该是1undefined。


JavaScript中if语句求值其实使用eval函数,eval(function f(){})返回function f(){}也就是true。


下面我们可以把代码改造下,变成其等效代码。



上面的代码输出其实就是1undefined。为什么那?我们查看下eval()说明文档即可获得答案



恰恰function f(){}语句的返回值是undefined,所以一切都说通了。


注意上面代码和以下代码不同。



问题3:在JavaScript中创建一个真正的private方法有什么缺点?


每一个对象都会创建一个private方法的方法,这样很耗费内存


观察下面代码



在这里 emp1,emp2,emp3都有一个increaseSalary私有方法的副本。


所以我们除非必要,非常不推荐使用私有方法。


问题4:JavaScript中什么是闭包?写出一个例子


老生常谈的问题了,闭包是在一个函数里声明了另外一个函数,并且这个函数访问了父函数作用域里的变量。


下面给出一个闭包例子,它访问了三个域的变量:


它自己作用域的变量

父函数作用域的变量

全局作用域的变量



输出很简单:



问题5:写一个mul函数,使用方法如下。



答案直接给出:



简单说明下: mul 返回一个匿名函数,运行这个匿名函数又返回一个匿名函数,最里面的匿名函数可以访问 x,y,z 进而算出乘积返回即可。


对于JavaScript中的函数一般可以考察如下知识点:


函数是一等公民

函数可以有属性,并且能连接到它的构造方法

函数可以像一个变量一样存在内存中

函数可以当做参数传给其他函数

函数可以返回其他函数


问题6:JavaScript怎么清空数组?



怎么清空arrayList


方法1


直接改变arrayList所指向的对象,原对象并不改变。


方法2


这种方法通过设置length=0 使原数组清除元素。


方法3


和方法2相似


问题7:怎么判断一个object是否是数组(array)?


方法1

使用 Object.prototype.toString 来判断是否是数组


这里使用call来使 toString 中 this 指向 obj。进而完成判断


方法二

使用 原型链 来完成判断


基本思想是利用 实例如果是某个构造函数构造出来的那么 它的__proto__是指向构造函数的prototype属性。


方法3

利用JQuery


JQuery isArray 的实现其实就是方法1


问题8:下面代码输出什么?



输出是0。delete操作符是将object的属性删去的操作。但是这里的x是并不是对象的属性,delete操作符并不能作用。


问题9:下面代码输出什么?



输出是1。delete操作符是将object的属性删去的操作。但是这里的x是并不是对象的属性,delete操作符并不能作用。


问题10:下面代码输出什么?



输出是undefined。x虽然是全局变量,但是它是一个object。delete作用在x.foo上,成功的将x.foo删去。所以返回undefined


问题11:下面代码输出什么?



输出是xyz,这里的 emp1 通过 prototype 继承了 Employee的 company。emp1自己并没有company属性。所以delete操作符的作用是无效的。


问题12:什么是undefined x 1?


在chrome下执行如下代码,我们就可以看到undefined x 1的身影。


当我们使用 delete 操作符删除一个数组中的元素,这个元素的位置就会变成一个占位符。打印出来就是undefined x 1。


注意如果我们使用trees[3] === 'undefined × 1'返回的是false。因为它仅仅是一种打印表示,并不是值变为undefined x 1。


问题13:下面代码输出什么?



输出是5。因为delete操作符并不是影响数组的长度。


问题14:下面代码输出什么?



输出是:



下面给出一个加法操作表

Number Number -

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部