1、如何减少DOM操作?
(1)缓存DOM查询结果:如果脚本需要多次使用同一个元素,可以把这些元素的位置保存在一个变量中。
(2)多次DOM操作合并到一次插入。
例如:
2、理解jsonp的原理,为何不是ajax?
概念:JSON是一种轻量级的数据传输格式,被广泛应用于当前Web应用中。是一种绕过同源策略实现跨域获取数据的解决方案,是一种非正式传输协议。
原理:利用src或href属性不受同源策略限制的特点,动态创建script标签,将远程接口赋值给src获取数据,并通过回调函数来接受和处理数据,达到跨域的目的。
为什么不是ajax?
ajax是通过XMLHttpRequest进行的,而jsonp只是加载javascript脚本,可以打开浏览器调试,网络监察查看,ajax请求找不到jsonp。反而在script里可以找到jsonp。
jsonp的优缺点:
优点:
不受同源策略的限制
兼容性好,在老版本浏览器中仍可运行,不需要XMLHttpRequest或ActiveX的支持
在请求完毕后可以通过调用callback的方式回传结果,将回调方法的权限给了调用方、
缺点:
只支持GET请求而不支持POST等其它类型的HTTP请求
只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题
jsonp在调用失败的时候不会返回各种HTTP状态码
存在一定的安全问题
3、document load 和 ready的区别?
window.addEventListener(‘load’,function(){}) 页面的全部资源加载完成才会执行,包括图片、视频等
document.addEventListener(‘DOMContentLoaded’,function(){}) DOM渲染完即可执行,此时图片、视频还可能没加载完
4、= = 和 === 的区别?
= = 会先做类型转换,再判断值得大小,
=== 类型和值必须都相等
5、函数声明和函数表达式的区别?
函数声明会被提升到当前作用域的顶部,函数表达式则不会。
函数声明一定会有函数名,而函数表达式一般不会有函数名。
函数声明不是一个完整的语句,所以不能出现在if-else,for循环, finally,try catch语句以及with语句中。
6、new Object()和 Object.create() 的区别
{}等同于new Object(),原型Object.prototype
Object.create(null)没有原型
Object.create({…})可指定原型
7、如何用JS实现继承
class继承、prototype继承
8、什么是json?
json中只能用双引号,不能用单引号
9、将url参数解析为JS对象
10、手写数组flatern,考虑多层级