- var let const 区别
- var是es5语法,let,const是es6语法。var有变量提升
- var,let是用来声明变量,可修改。const是用来声明常量,不可修改
- let,const 有块级作用域,var没有
- typeof能判断哪些类型
- undefined,string,boolean,number,symbol (所有的值类型)
- object ([], {}, null)
- function
- 强制类型转换和隐士类型转化
- pareInt,parseFloat,toString
- ==,逻辑运算,if,+字符串拼接
- split() 和 join()的区别
split(): 将数组转化为字符串
join() : 将字符串转化为数组 - pop,push,shift,unshift 分别是什么
分析: 功能是什么,返回值是什么,是否对原数组造成影响
pop删除数组的最后一项,返回删除的元素
shift删除数组的第一项,返回删除的元素
push在数组的最后一项增加一个元素,返回数组的长度
unshift在数组的第一项增加一个元素,返回数组的长度
都对数组造成影
纯函数:(不该变原数组,返回一个数组)
concat,map,filter - slice 和splice的区别
slice 剪切 纯函数
splice 剪接 非纯函数 - [10,20,30].map(parseInt) 10 NAN NAN 拆解
- ajax中get和post的区别
- get一般用于查询 post用于用户提交数据
- get参数拼接在url上,post放在请求体中(数据可以很大)
- post有利于防范xsrf攻击
- call 和 apply bind 的区别是什么
改变this执行
call :第一个参数是this,后面是零散的数据
apply:第一个参数是this,后面是一个数组,或者一个结合
bind:第一个参数是this,但是返回一个函数,需要重新调用 - 事件委托(代理)是什么
就是把一个元素响应事件的函数委托到另一个元素,利用冒泡的原理,把事件加到父级上,触发执行效果 - 闭包是什么,有什么特性,负面影响
两个函数存在嵌套关系,内部函数可以访问外部函数的参数
函数作为参数被传入 函数作为返回值
自由变量在函数定义的地方查找
变量会常驻内存,得不到释放。不要乱用 - 如何阻止事件冒泡和默认行为
- e.stopPropagation()
- e.preventDefault()
- 增删改查dom节点方法
- creatElement,appendChild,removeChild,getelementById
- 如何减少dom操作
- dom查找是非常耗性能
- 缓存dom查询结果
- 多次dom操作,合并到一次插入
- creatDocumentFragment
-
jsonp的原理,为何不是真正的ajax
jsonp 是通过script标签实现的
ajax是用过xmlHttpRequest
img ,script =>
jsonp -
load,ready区别
-
== ===
类型转换 ,严格相等 -
函数声明和函数表达式的区别
-
this的场景题
-
new Object() {}, Object.creat()区别
Object.creat() 创建一个空对象,把空对象的原型执行你传入的对象 -
手写trim,兼容
-
获取最大值
-
js实现继承
class
prototype -
什么是json
json是一种数据格式,本质就是一个字符串
window.JSON是全局对象。JSON.stringifry JSON.parse -
如何捕获js异常
try catch window.onerror -
获取当前页面的url参数
location.serach -
手写深拷贝 object.assign不是深拷贝(只能一层)
-
requestAnimateFrame
-
新能优化:
原则:多使用内存,缓存,减少计算,网络请求
方向:加载页面,页面渲染,页面操作流畅