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,‘‘)
}
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.