基础题
1:基本数据类型和引用类型分别有哪些?
基本数据类型:String、Number、Boolean、Undefiend、Null
引用类型:Object、Aarray、Function、Date、RegExp
2:本地对象有哪些?内置对象有哪些?宿主对象有哪些?
本地对象:基本数据类型和引用类型
内置对象:Global(ParseInt、ParseFloat、Number、String、 isNaN)、Math
宿主对象:DOM、BOM
3:什么是堆和栈?堆和栈分别存放什么数据类型?
堆和栈是一个数据结构。是存放数据和地址。
栈存放的是基本数据类型和引用类型地址
栈存方的是引用类型数据
4:什么是隐式转换什么是显示转换?
隐式转换:在做不同数据类型比较和运算时候。JS引擎会把不同类型数据转换成同类型数据再 去运算。
显示转换:人为的使用ECAMScript提供的方法去对数据类型进行转换。如Number()、parseInt、parseFloat等等方法
5:数组和对象的深浅拷贝?
浅拷贝:拷贝的是引用类型的地址
深拷贝:拷贝的是引用类型的数据
6:值类型赋值和引用类型赋值区别?
值类型赋值 :在栈中把变量的数据拷贝一份
引用类型赋值:在栈中拷贝引用类型的地址
7:判断数据类型方法有哪些?至少三种
1:typeof
2:instanceof
3:constructor
4:Object.prototype.toString.call([]) == “[object Array]”
中级题
1:什么是json?Json字符串转换成json对象方法?json对象转转json字符串方法?
Json是一种轻量级数据交互格式。常用来跟服务器端数据的传输。Json是字符串类型对象。
Json字符串转换成对象 : JSON.parse() eval()
Json 对象转换成json字符串:JSON.stringify()
2:ajax创建的步骤?
//初始化XMLHttpRequest对象
var xhr = new XMLHttpRequest();
//初始化HTTP请求参数
xhr.open("请求方式","请求接口","是否异步");
//设置请求头信息(post需要 get不需要)
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
//发送请求
xhr.send();
//监听请求状态
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
}
}
3:ajax有几种请求方式?Post和get区别?
很多种 常用的post、get和delete。不常用的有Link、option、Head等等
Post Get
安全性高(传输数据在请求体) 安全性低(因为数据放在url地址)
提交数据(因为安全性高) 获取数据(安全性低)
理论传输数据大小无限制 传输数据不同浏览器大小不一样大概(7-8k)
传输速度慢(因为是在请求体提交) 传输速度快(在url提交)
需要设置请求头信息 规定数据格式 不需要设置
4:什么是跨域?
因为浏览器同源策略缘故。不同源请求会产生跨域。协议、主域名、子域名、端口号、ip和域名请求不同都会产生跨域
5:解决跨域方法有哪些?
JSONP、Cors
6:什么是jsonp?jsonp和ajax区别?
Jsonp是解决跨域的方法。主要实现就是动态创建一个script标签。利用script标签的src不受同源策略特点。把接口地址绑定在src上面。在通过一个回调函数接收数据。
JSONP AJAX
1:解决跨域 1:无法跨域
2:只允许get请求 2:可以post和get请求还有delete、head等等请求
3:实现方式 动态创建script标签 3:newxhlhttprequest对象
4:无法设置请求头信息 4:可以设置头信息
5:需要通过一个回调函数接收数据 5:通过onreadystatechange监听接收数据
6:接收数据是json对象 6:接受数据是json字符串
7:常见的状态码有那些?
200 请求成功
304 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
400 请求语法有问题服务器不理解
403 服务器拒绝请求没有权限
404 找不到网页
5开头 错误都是服务器错误
8:什么是事件委托?事件委托优缺点?
把子元素事件绑定给父元素或者更高的元素。利用冒泡原理点击子元素事件会触发到父元素。拿到事件event获取到target事件源进行操作。
优点 缺点
1:减少事件注册。节省内存 1:层级过多 处理起来比较麻烦
2: 动态添加子元素也可以触发事件。 2:层级过多 可以会被某些元素事件阻止事件冒泡
3:不支持事件冒泡事件 无法使用
9:什么是事件流?事件流几个阶段?什么是事件冒泡、什么是事件捕获?
事件流:页面接收事件的顺序。
三个阶段 捕获、目标、冒泡
事件冒泡:从当前目标元素向上逐级触发父元素事件、直到document结束。实际到window结束
事件捕获:从当前window到目标元素逐级触发事件。到目标元素结束。
10:函数可以传递哪些类型参数?函数可以返回哪些类型数据?
都一样 引用类型和值类型都可以传递和返回。
高级题
1:什么是arguments?
每一个函数都有一个arguments对象。用来保存函数是实参。
2:caller和callee区别?
Caller是函数的属性。主要用来获取直接调用当前函数的函数。
Callee是arguments的属性。主要用来获取当前arguments的函数。
3:bind和apply和call相同点和不同点?
相同点
1:都是函数非继承来的方法
2:都是改变this指向
3:第一个参数都是改变当前函数this指向 一般是对象
不同点
1:call是连续传递参数 apply数组传参 bind是可以连续传参 也可以调用函数之后在传递参数
2:call和apply是直接调用函数。 bind会返回一个函数 需要在调用一次。
4:什么是作用域什么是作用域链?
作用域:函数和变量的作用(读、写)范围。
作用域链:函数在声明时候就会生成一个作用域链。其函数的属性[[scope]]对应的就是当前作用域链。里面默认存放着全局变量对象(GO)。当函数调用时。会把当前函数的活动对象(AO)也会存到这个作用域链中。并推送这作用域链中第一位。作用域链其实就是为了保证变量的访问顺序。
5:什么是工厂模式?什么是构造函数?
工厂模式也是一种设计模式。就是一个函数封装一个对象,并返回。可以重复的调用使用。
构造函数是一种特殊函数。主要是为了实例化对象。通常配合new操作符使用。
6:this有几种指向情况?
7:new操作符做了哪些操作?
1:创建一个空对象
2:把构造函数this指向了当前空对象
3:执行代码 把构函数变量赋值给对象
4:隐式返回当前对象
8:什么是原型,什么是原型链?
原型:每一个函数都有一个prototype属性。这个属性就是函数的原型属性。同样prototype也是一个对象。可以称为原型对象。主要用来继承。
原型链:当一个引用类型继承另一个引用类型的属性和方法时候会产生一个原型链。
9:什么是闭包?闭包的优缺点?
闭包也可以称为函数闭包。是函数+函数执行上下文。其实现方式就是直接创建一个函数并调用。或者函数嵌套函数,函数内部访问到外部函数的变量,也会形成一个闭包。
优点 缺点
1:变量和函数缓存。 1:不正确使用闭包会导致内存泄露内存浪费
2:防止变量污染。
3:保证变量和方法的私有性。(增强了封装性)
10:什么是同步,什么是异步?
同步:排队执行任务。一个任务(一行代码)执行完毕。下一个任务( 下一行代码)才能去执行。
异步:就是代码会先放在任务队列中。优先让主线程代码先执行。只有任务队列通知主线程可以执行。主线程再会把任务队列代码放在主线程执行。一般异步都是需要触发条件执行的代码。
11:什么是GC、什么是内存泄露?(10分)
GC垃圾回收机制。会自动去释放不在使用的变量。一般都是会固定时间去检查。全局变量不会被回收。
内存泄露 不在使用的变量没有被垃圾回收机制回收。就会造成内存占用。(ie9 以下和欧朋浏览器js引擎出现问题。闭包会导致内存泄漏)