精选前端面试题之Javascript(20道)

1.javascript哪些数据类型

在Javascript中只有五种简单类型,分别为null,undefined,boolean,String和Number。一种复杂类型:object。代码类型只有一种形式就是function。javascript

 2:如何判断javascript的类型

可使用typeof函数java

例如
var name = 'mdemo';console.log(typeof name);// 'string'还能够用instanceof

3.数组方法pop() push() unshift() shift()

Push()尾部添加 pop()尾部删除
Unshift()头部添加 shift()头部删除数组

4.javascript的做用域

javascript和其余语言不一样,不存在花括号之间的块级做用域,而是用函数来进行做用域的划分。浏览器

5.javascript中数组的经常使用方法

concat--将两个数组链接起来splice--能够用来删除、添加、替换安全

6.IE和标准下有哪些兼容性的写法

Var ev = ev || window.event
document.documentElement.clientWidth || document.body.clientWidth
Var target = ev.srcElement||ev.target 闭包

7.javascript中数组删除某一元素如何实现

找到要删除的元素的索引,而后使用splice(index,1)删除app

8.函数中的arguments是数组吗

不是数组,typeof 能够看到是 object类型,并且arguments还有callee方法,因此不会是数组的。函数

9.什么叫作闭包

在个人前面的文章中有详细的介绍。闭包性能

10.事件委托是什么

让利用事件冒泡的原理,让本身的所触发的事件,让他的父元素代替执行!学习

11.如何阻止事件冒泡和默认事件

canceBubble return false

12.”==”和“===”的不一样 

前者会自动转换类型
后者不会

13.JavaScript里函数参数arguments是数组吗? 

在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,经过使用下标就能够访问相应的参数。

arguments虽然有一些数组的性质,但其并不是真正的数组,只是一个类数组对象。其并无数组的不少方法,不能像真正的数组那样调用.jion(),.concat(),.pop()等方法。

14.什么是"use strict";?使用它的好处和坏处分别是什么?

在代码中出现表达式-"use strict"; 意味着代码按照严格模式解析,这种模式使得Javascript在更严格的条件下运行。

好处:

  • 消除Javascript语法的一些不合理、不严谨之处,减小一些怪异行为;
  • 消除代码运行的一些不安全之处,保证代码运行的安全;
  • 提升编译器效率,增长运行速度;
  • 为将来新版本的Javascript作好铺垫。

坏处:

一样的代码,在"严格模式"中,可能会有不同的运行结果;一些在"正常模式"下能够运行的语句,在"严格模式"下将不能运行。

15.this对象的理解

this老是指向函数的直接调用者(而非间接调用者);

若是有new关键字,this指向new出来的那个对象;

在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this老是指向全局对象Window;

16.eval是作什么的?

它的功能是把对应的字符串解析成JS代码并运行;

应该避免使用eval,不安全,很是耗性能(2次,一次解析成js语句,一次执行)。

由JSON字符串转换为JSON对象的时候能够用eval,var obj =eval(‘(‘+ str +’)’);

17.new操做符具体干了什么呢?

(1)建立一个空对象,而且 this 变量引用该对象,同时还继承了该函数的原型。

(2)属性和方法被加入到 this 引用的对象中。

(3)新建立的对象由 this 所引用,而且最后隐式的返回 this 。

18.call() 和 apply() 的区别和做用?

apply()函数有两个参数:第一个参数是上下文,第二个参数是参数组成的数组。若是上下文是null,则使用全局对象代替。

如:function.apply(this,[1,2,3]);

call()的第一个参数是上下文,后续是实例传入的参数序列。

如:function.call(this,1,2,3);

19.原型链 

JavaScrip能够采用构造器(constructor)生成一个新的对象,每一个构造器都拥有一个prototype属性,而每一个经过此构造器生成的对象都有一个指向该构造器原型(prototype)的内部私有的连接(proto),而这个prototype由于是个对象,它也拥有本身的原型,这么一级一级直到原型为null,这就构成了原型链.

20.__proto__ 属性和prototype属性的区别

prototype是function对象中专有的属性。
__proto__是普通对象的隐式属性,在new的时候,会指向prototype所指的对象;
__proto__其实是某个实体对象的属性,而prototype则是属于构造函数的属性。
__proto__只能在学习或调试的环境下使用。

这里抓住两点:

  • 构造函数经过 prototype 属性访问原型对象
  • 实例对象经过 [[prototype]] 内部属性访问原型对象,浏览器实现了 __proto__属性用于实例对象访问原型对象

Object 为构造函数时,是Function的实例对象;Function为构造函数时,Function.prototype 是对象,那么他就是Object的实例对象。

相关文章
相关标签/搜索