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;
}
…
微信民眾號:
前端練習日誌