1-typeof的返回值
number、string、boolean、object、undefined、function、symbol
2-类型转换
强制:parseInt、parseFloat、Boolean、String、Number
隐士:>、<、+、*、==、if、||、&&
除了判断null或者undefined其他一律三等
3-split和join
split用于将字符串通过指定分隔符拆分为数组
join则像是一个split的你操作,用以将数组转字符串,默认转出的字符串以逗号分隔,可以指定""参数消除
4-常用的数组操作
push、pop、shift、unshift、splice、join、slice、concat、fill、sort、flat、from、reverse、includes、indexOf、 map、forEach、filter、every、some、reduce
5-ie兼容性
event || window.event
event.target || event.scrElement
document.documentElement.clientWidth || document.body.clientWidth
event.stopPropagation || event.cancelBubble=true
event.preventDefault || event.returnValue = false
6-ajax
I-get和post的区别
get请求参数会附带到地址栏后,明文传输,安全性较低,不同的浏览器对大小限制不同,chrome在7700左右, 主要用于获取
post参数放在虚拟载体中,对用户不可见,相对较安全,理论上对数据量无限制,主要用于提交
II-ajax实现过程
//兼容处理
var xhr = null
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest()
}else{
xhr = new ActiveXObject("Microsoft.XMLHTTP")
}
//准备请求
xhr.open(get/post) //若为post需要setRequestHeader
//发送
xhr.send()
//监听状态
xhr.onreadyStateChange = ()=>{
if(xhr.readyState == 4 && xhr.status == 200){
//获取api数据
json.parse(apiData)
}
}
7-call和apply的区别
都用于改变this指向
传参方式不同,call单个,apply传递一个数组
8-什么是事件委托
通过事件冒泡将子元素委托到父元素处理,这样具有一定的动态性,不需要考虑后续子元素的增减,亦不需要重新 注册事件,但是应用场景也仅限于此
9-闭包
当在函数内return一个函数,且return的函数保留是外层函数的引用,会生成闭包,闭包会阻止变量被回收,延长了 生命周期。但是滥用会导致内存泄漏
使用方式:将函数作为参数或返回值
应用:
表现:定义处和使用处不一样
10-常用dom操作
I-创建
createElement、createTextNode
II-插入
insertBefore、appendChild
III-替换
replaceChild
IV-删除
removeChild
V-获取
getElementsByClassName、getElementById、getElementsByTagName、querySelector(静态)
11-jsonP
利用script标签的跨域性动态创建并插入,但是只支持get请求,且需要与后台配合
12-load和ready的区别
window.onload会等待页面资源加载完毕,这包括图片、css、js、html
ready在原生上并没有实现,它只关注dom是否创建完毕
13-函数声明与函数表达式的区别
使用function关键字定义的函数将在预编译过程中被提升,函数是全局可用的;而使用var定义的则不会被提升,只 在执行到时才有含义
14-http
https://www.jianshu.com/p/7ed690f4b83a
15-异步和同步的区别
异步基于js单线程,不会阻塞代码,同步会
16-手写promise加载图片
function loadImg(src){
return new Promise((resolve,reject)=>{
let img = document.createElement('img')
img.onload = ()=>{
resolve(img)
}
img.onerror = ()=>{
reject('err')
}
img.src = src
})
}
17-dom事件绑定
let elem = document.getElementById('test')
elem.addEventListener(eventType,callback)
elem.onEventType = callback
<div onEventType="callback"></div>
18-判断字符串以字母开头,后边可以是字母,数字或下划线,长度5-30
/[a-zA-Z]\w{5,30}/
19-null和undefined的区别
null表示一个值为空的对象,使用Number转换的结果为0;undefined表示一个已声明但未初始化值的变量,使用 Number转换结果为NaN
undefined常见的场景如下
函数参数未传
函数无返回值
对象不存在某属性
变量声明未赋值
null常见常见
原型链终点
对象占位
20-new干了什么
创建一个对象,并将this指向该对象,将函数的属性和方法拷贝一份同时对原型继承,最后返回该对象
21-按需加载
defer 并行加载、非阻塞、保证顺序
async 不保证顺序
动态script、按需加载
22-flash和ajax
flash适用媒体、质量图,ajax适用文本、搜索
都用于服务器通信,都实现了局部刷新
23-写出下面代码的执行结果
结果:4 1 3 5 2
解析:引擎执行时打印4,调用a函数输出1,遇到await,先对await进行求值输出3,然后将后续代码视为异步交管webAPI后继续执行同步代码输出5,此时同步代码执行完毕且其他可退出调用栈的代码,开启事件循环,轮询回调队列输出2
24-什么是宏任务和微任务,两者的区别
宏:定时器、dom事件、ajax
微:promise、async/await
区别:微任务的执行时机早于宏任务
25-值类型和引用类型的区别
值存储在栈内存中,引用类型存储在堆内容中;当变量值为引用类型时,会在堆内存中开辟空间并将地址交予变量(变量在栈内存)
26-如何判断数组
arr instanceof Array
27-深拷贝
28-手写简易jq
29-truely和falsely变量
两次取反后为true或false(除了0、‘’、NaN、null、undefined、false外都是truely变量)
30-class的原型本质,如何理解
原型和原型链
当使用new操作符时,返回的实例会被添加__proto__隐式原型指向原型对象,而每一个原型对象又有自己的隐式原型指向父级的原型对象,直到null
31-手写继承
32-手写bind
33-this
场景:普通函数、call/apply/bind、对象方法、class、箭头函数
指向:取值取绝于执行(箭头函数的this取其父级中的this)