JavaScript面試題

亦世發表於2018-08-30

總結一些面試中容易錯的題(主要是我自己需要特別記憶的)

變數型別和計算

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

相關文章