js面试笔试题

1. Js的Typeof返回类型有那些?

  string;undefined;number; function;object;boolean;symbol(ES6)

2. null和undefined的区别?

  null是Js的关键字,表示空值。可作为object的一个特殊值,如果object值为null,表示该对象不是一个有效对象。

  undefined不是Js的关键字,是一个全局变量,是Global的一个属性。

  • 类型不一样;typeof(null) == "object",typeOf(undefined) == "undefined"
  • 转化为值时不一样:undefined为NaN ,null为0, 即Number(null)==0,Number(undefined) == NaN

  相同点:

  都是原始类型的值,保存在栈中变量本地

3. 闭包的特性,闭包解决了什么问题?

  闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

  特性

    1、函数嵌套函数。
    2、函数内部可以引用外部的参数和变量。
    3、参数和变量不会被垃圾回收机制回收。

  用途

    1、闭包可以读取函数内部变量    

    2、将函数内部变量的值始终保存在内存中

  优势

     1、保护函数内的变量安全。

     2、在内存中维持一个变量。

     3、通过保护变量的安全实现JS私有属性和私有方法(不能被外部访问)。

     4、避免全局变量的污染。

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

push()尾部添加 pop()尾部删除
unshift()头部添加 shift()头部删除 

5. ”==”和“===”的不同

答案:前者会自动转换类型,再判断是否相等
后者不会自动类型转换,直接去比较

6. 说说对 prototype和 __proto __ 的理解

prototype是函数才有的属性,prototype本身也是个函数对象;__proto __是所有对象都有的属性,__proto __指向构造它的对象的对象的prototype。

7. 使用构造函数实现一个类Foo,需要有属性 count, 方法bar(), 并且写出创建该类对象的方法
function Foo(){
  this.count = 0;
}

Foo.prototype.bar = function(){
}

var foo = new Foo();
foo.bar();

 

8. 说说ES6为什么要引入let关键字
因为要解决var声明对象产生的问题。var是函数级作用域,而let是块作用域。var存在变量提升,即变量可以在声明之前使用,值为undefined,而let声明的变量如果在声明之前使用会抛出一个错误。另外let不允许重复声明变量。ES6 规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。这样的错误在 ES5 是很常见的,现在有了这种规定,避免此类错误就很容易了。

 

 

 

posted @ 2018-12-06 20:39  吴筱军  阅读(301)  评论(0编辑  收藏  举报