为什么JavaScript是单线程?如何实现多线程
防止DOM渲染冲突的问题;
使用worker可实现多线程
什么是事件循环(EventLoop)
如何实现不借助临时变量,进行两个整数的交换
let a = 2,
b = 3;
[b,a] = [a,b]
console.log(a,b) // 3 2
js 的typeof返回有哪些数据类型?
字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。
- String 字符串数据类型 :所有被单引号,双引号,反引号包裹的都是字符串类型
- Number 对象是原始数值的包装对象
- Boolean 对象用于转换一个不是 Boolean 类型的值转换为 Boolean 类型值 (true 或者false).
- null 在 JavaScript 中 null 表示 “什么都没有”。null是一个只有一个值的特殊类型。表示一个空对象引用。
- undefined 属性用于存放 JavaScript 中未定义的值。
- ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。
什么是模块化编程?
每个模块内部,module变量代表当前模块。
这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。
常见web安全
错误的内容推断
说明:
文件上传类型校验失败后,导致恶意的JS文件上传后,浏览器 Content-Type Header 的默认解析为可执行的 JS 文件
第三方依赖包
减少对第三方依赖包的使用,如之前 npm 的包如:event-stream 被爆出恶意攻击数字货币;
HTTPS
描述:
黑客可以利用SSL Stripping这种攻击手段,强制让HTTPS降级回HTTP,从而继续进行中间人攻击。
本地存储数据
避免重要的用户信息存在浏览器缓存中
静态资源完整性校验
描述
使用 内容分发网络 (CDNs) 在多个站点之间共享脚本和样式表等文件可以提高站点性能并节省带宽。然而,使用CDN也存在风险,如果攻击者获得对 CDN 的控制权,则可以将任意恶意内容注入到 CDN 上的文件中 (或完全替换掉文件),因此可能潜在地攻击所有从该 CDN 获取文件的站点。
请描述一下 cookies
,sessionStorage
和 localStorage
的区别?
sessionStorage 、localStorage 和 cookie 之间的共同点:都是保存在浏览器端,且同源的.
sessionStorage 、localStorage 和 cookie 之间的不区别:
1.cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
2.存储大小限制也不同,cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
3.数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭
事件传播的三个阶段是什么
1.捕获:事件由页面元素接收,逐级向下,到具体的元素
2.目标:具体的元素本身
3.冒泡:跟捕获相反,具体元素本身,逐级向上,到页面元素
同步和异步
"同步模式"就是后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的。**
"异步模式"则完全不同,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。
什么是内存泄漏
内存泄漏指任何对象在用户不再拥有或需要它之后仍然存在。
垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。
那些操作会造成内存泄漏?
会造成内存泄漏的操作:
-
setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。
-
闭包
-
控制台日志
-
循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)