1.js的基本类型有哪些?引用类型有哪些?null和undefined的区别。
基础类型:number,null,regex,string,boolean 引用类型 : object,function,array null是数据类型,undefined未定义
2.如何判断一个变量是Array类型?
array:Object.prototype.toString.call(obj) [object Array]
3.引用类型和基本类型的区别
引用类型:堆内存,是二级缓存,保存一个指针,指向另一个内存,如果程序不结束或者没有手动释放,则不释放 基本类型:栈内存,是一级缓存,由系统分配或者释放。
4.事件委托(手写例子)
<div id='parent'></div> <script> function delegate(dom,type,fn){ document.body.click(function(e){ if(e.target = dom){ fn(e) } }) } <script>
5.对闭包的理解,闭包的优缺点?
闭包:一个可以让外部访问的函数。消耗内存
6.改变this的几种方法?
call , apply , bind
7.显式和隐式原型
显式原型:prototype , Function是一个Object,Function有一个属性prototype,它是一个指针,指向一个对象。这个对象有construsctor属性 隐式原型:_proto_ ,指向创建这个对象的函数的prototype,一个指针指向一个对象。
8.创建对象的多种方式
//字面量 var obj = {name:'test'} //构造函数 var obj = new Object({name:''})
9.实现继承的多种方式和优缺点
//原型链 function Parent(){ this.name='' } function Son(){} Son.prototype = new Parent() //创建新对象 var son = Object.create(new Parent()) //call,apply function Son(){ Parent.call(this,'') }
//es6
class Son extends Person{}
10.变量提升
var value = 1; var test = function(){ console.log(value) var value = 2; } test() function test(){ console.log(value+1) } test(); // undefined , undefined
11.匿名函数
(function(){ alert('test') })()
12.NaN != NaN,false != null
13.new 一个对象的过程
function ClassName (option){ console.log(option) } ClassName.prototype.say=function(){} let obj = new ClassName({}) 1.创建一个对象,传入原型 lo = Object.create(ClassName.prototype) 2.执行当前函数,并且this执行 newObj = ClassName.call(o) 3. 返回新的对象 newObj
14.实现一个bing函数
//bings函数 Function.prototype.binds = function () { var args = [].slice.call(arguments,1),target = arguments[0] return this.apply(target,args) } function tesa(a,b) { console.log(this,a+b) return a+b } console.log(tesa.binds({a:1},1,2))