四月份面試題匯總(一)

1.明白原型、原型鏈?

每豎立一個函數,函數上都有一個prototype的屬性,他是一個對象。這個對象的作用就是當運用它豎立實例的時刻,這些實例都邑同享原型上的屬性和要領。
當我們接見對象中的某個屬性時,假如這個對象內部不存在這個屬性,那末他就會去__proto__內里去找這個屬性,這個__proto__又會有本身的__proto__,
就這麼一向找下去直到末了一個__proto__值為null。

var A = function(){};
var a = new A();
console.log(a.__proto__); //A {}(即組織器function A 的原型對象)
console.log(a.__proto__.__proto__); //Object {}(即組織器function Object 的原型對象)
console.log(a.__proto__.__proto__.__proto__); //null

2. __proto__和prototype的關聯?

__proto__是每一個對象都有的一個屬性,而prototype是函數才會有的屬性。

舉例:var p = new Person();
个中p.__proto__ == Person.prototype。

3. 怎樣判別屬性是自有屬性照樣原型屬性?

hasOwnProperty()要領返回true即為自有屬性,返回false有兩種能夠

  • 1.為原型屬性;
  • 2.跟本不存在該屬性

所以推斷是不是是原型屬性,要先用in推斷該對象中是不是存在此屬性:

function hasPrototypeProperty(obj, name){
        return name in obj && !obj.hasOwnProperty(name);
    }

4.怎樣推斷某個對象是不是是另一個對象的原型對象?

isPrototypeOf();
例:function Cat(name,color){}
var cat1 = new Cat();
alert(Cat.prototype.isPrototypeOf(cat1)); //true

5. ES6箭頭函數注重點 ?

  • 1.函數體內的this,是定義時地點的對象,而不是運用時地點的對象,一直指向自身外的第一個this。
  • 2.不能夠做組織函數,也就是說不能夠運用 new 敕令,否則會拋錯。
  • 3.不能夠運用arguments對象,不存在,能夠運用Rest替代。
運用Rest:
    var foo=(...arguments)=> {console.log(arguments);
}

6. 讓你最先一個項目,你會挑選用 vue 照樣 React?

  • 1假如你喜好用模板搭建運用,請運用 vue。
  • 2假如你的運用須要盡量小和快,請運用 vue。
  • 3假如你設計構建一個大學型運用,請運用 React。
  • 4假如你想要同時適用於Web端和原生App的框架,請運用 React。
  • 5假如你想要更大的生態圈(論壇等),請運用 React。

7. React豎立組件的三種體式格局及其辨別 ?

  • 1.函數式定義(無狀況組件):function 組件名(props,/context/){}
  • 2.ES5之var 組件名= React.creatClass({})
  • 3.ES6之class 組件名 extends React.Components{}

8. React 中 keys 的作用是什麼 ?

keys 是用於追蹤哪些元素被修正、被增加、被刪除的輔佐標識。在開闢過程當中,須要保證某個元素的 key 在其同級元素中具有唯一性。

9. 為何接下來這段代碼不是 IIFE(馬上挪用的函數表達式)?

function foo(){ }();

以function關鍵字開首的語句會被剖析為函數聲明,而函數聲明是不允許直接運轉的。
只有當剖析器把這句話剖析為函數表達式,才能夠直接運轉,

    處理1.
    (function foo(){
            // code..
    })()
    處理2.
    var foo =  function(){};
    foo();

10. js中怎樣推斷null和undefined ?

    if(typeof(a)=="undefined"){
        console.log('undefined')
    }
    if(typeof(a)!="undefined"&&a!=0&&!a){
        console.log('null')
    }

11. 完成一個數組亂序分列 ?

    var a = [1, 2, 3, 5, 4];
    function fn(a, b) {
        return Math.Random() - 0.5
    }
    a.sort(fn);//[5,1,2,4,3]
    
    
    var a = [1, 2, 3, 5, 4];
    function fn(a, b) {
        return a - b
    }
    a.sort(fn);//[1, 2, 3, 4, 5]
    
    
    var a = [1, 2, 3, 5, 4];
    function fn(a, b) {
        return b - a
    }
    a.sort(fn);//[5, 4, 3, 2, 1]

js怎樣辨別數組照樣對象 ? (代表:完成深拷貝函數)

第一種:Object.prototype.toString.call(a).slice(8,-1) == ‘Array’ ? [] : {}

    var a = {};

    Object.prototype.toString.call(a);//"[object Object]"

    var a = [];

    Object.prototype.toString.call(a);//"[object Array]"

第二種:

    var a=[];
    var b={};
    typeof a === 'object' && !isNaN(a.length)//true
    typeof b === 'object' && !isNaN(b.length)//false

第三種:

    var a=[];
    var b={};
    Array.isArray(a);//true
    Array.isArray(b)//false

完成一個深拷貝函數:

function clone(obj) {
    if(typeof(obj)=='object'&&obj){//&&obj是消除obj=null
        //辨別是數組照樣對象,豎立空數組或空對象
        var o = Array.isArray(obj) ? [] : {};
        for(var k in obj) {
            if(typeof(obj[k])=='object'){
                o[k] = clone(obj[k]);
            }else{
                o[k] = obj[k];
            }
        }
    }else{
        return obj;
    }
    return o;
}

微信民眾號:
前端練習日誌

    原文作者:yuezhongbao
    原文地址: https://segmentfault.com/a/1190000014638242
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞