JavaScript面试题

179 阅读2分钟

总结一些面试中容易错的题(主要是我自己需要特别记忆的)

变量类型和计算

1、typeof console.log  //function

2、何时用==何时用===

答:obj.a == null  相当于obj.a === null || obj.a === undefined

        除了这里用== 其他情况全用===

3、js中有哪些内置函数  ---  数据封装类对象

Object、Array、Boolean、Number、String、Function、Date、RegExp、Error

4、如何理解JSON?

JSON  也不过是一个JS对象而已,但是JSON里不能有函数。

原型和原型链

obj.__proto__ === Object.prototype

5、如何准确判断一个变量是数组?

var arr = [];

(1) arr instanceof Array    //true;

(2) Object.prototype.toString.call(arr) === '[object Array]';

(1)如果arr = {__proto__: Array.prototype}时,将判断错误

6、写一个原型链继承的例子

function Elem(id) {

      this.elem = document.getElementById(id)

}

Elem.prototype.html = function (val){

     var elem = this.elem;

      if(val){

            elem.innerHTML = val;

            return this   //链式操作

      } else {   return elem.innerHTML;  }

}

Elem.prototype.on = function(type, fn){

      var elem = this.elem;

      elem.addEventListener(type, fn)

}

var div1 = new Elem('div1')


div1.html('<p>hello imooc</p>');

div1.on('click', function(){

      alert('clicked')

})

7、描述new一个对象的过程

答:创建一个新对象-->this指向这个新对象-->执行代码,即对this赋值-->返回this

作用域作用域链和闭包

8、说明this几种不同的使用场景

答:作为构造函数执行、作为对象属性执行、作为普通函数执行、call/apply/bind

9、创建10个<a>标签,点击时弹出对应序号

for(i=0;i<10;i++){

      (function(i){

            var a = document.createElement('a')

            a.innerHTML = i + '<br>'

            a.addEventListener('click', function(e){

                    e.preventDefault();

                    alert(i)

            })

            document.body.appendChild(a)

      })(i)

}

10、如何理解作用域

自由变量、作用域链-即自由变量的查找、闭包的两个场景

11、实际开发中闭包的应用

闭包实际应用中主要用于封装变量,收敛权限

function isFirstLoad() {

     var _list = [];

     return function (id){

            if(_list.indexOf(id) >=0 ) { return false }

            else {

                _list.push(id)

               return true;

            }

    }

}

//使用

var firstLoad = isFirstLoad()

firstLoad(10)   //true

firstLoad(10)   //false

firstLoad(20)  //true