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; }
...
微信公众号: 前端实习日记