1.理解原型、原型鏈?前端
每建立一個函數,函數上都有一個prototype的屬性,他是一個對象。這個對象的做用就是當使用它建立實例的時候,這些實例都會共享原型上的屬性和方法。
當咱們訪問對象中的某個屬性時,若是這個對象內部不存在這個屬性,那麼他就會去__proto__裏面去找這個屬性,這個__proto__又會有本身的__proto__,
就這麼一直找下去直到最後一個__proto__值爲null。vue
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有兩種可能dom
因此判斷是不是原型屬性,要先用in判斷該對象中是否存在此屬性:函數
function hasPrototypeProperty(obj, name){ return name in obj && !obj.hasOwnProperty(name); }
4.如何判斷某個對象是不是另外一個對象的原型對象?this
isPrototypeOf(); 例:function Cat(name,color){} var cat1 = new Cat(); alert(Cat.prototype.isPrototypeOf(cat1)); //true
5. ES6箭頭函數注意點 ?prototype
使用Rest: var foo=(...arguments)=> {console.log(arguments); }
6. 讓你開始一個項目,你會選擇用 vue 仍是 React?code
7. React建立組件的三種方式及其區別 ?
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; }
...
微信公衆號: 前端實習日記