深浅拷贝:
js数据存储机制:
数据 内存:
栈:普通类型的数据
堆:引用类型(值-->指针在栈)
浅拷贝、浅copy、浅复制:
var arr = []
var arr2 = arr;
双向绑定:
深拷贝、深copy、深复制:
序列化:将一个对象序列化为特定的字符串
toString()
JSON.stringify()序列化
JSON.pares()反序列化
场景:
1、document.cookie='key='+JSON.stringify(arr|obj) 存值
2、解决浅拷贝、实现深拷贝
3、转化后端返回的数据流
[{},{}]
{data"[]} str
js时间线:浏览器用来记录js执行状态(整个页面的流程)
loading: init -loading
创建了document(文档节点),element text节点; 生成dom树结构
document.readyState = loading
--------
interactive: loading-interactive
解析html结构
css
html
js
html 结构解析完毕
document.readyState = interactive
DOMContentLoaded:addEventlistenear()
异步加载的资源:
img src=
iframe src=
异步数据
complete: interactive-complete
document.readyState = complete
js 单线程
1、js 执行会导致html页面解析的阻塞
异步处理方式:独立开辟线程 (间接让js实现了的"多线程")
setTimeout()
setInterval()
ajax (不刷新页面的情况下拿到数据)
优化:
body
<script>
</script>
js的异步加载:
<script async='async'></script> 下载js异步执行->立即执行
<script defer='defer'></script> 下载js异步执行->等interactive后执行
*****
原生ajax:异步通信
XMLHttpRequest
服务器交互?
form 表单 数据提交 发送数据
<a href='11.jsp?id=xxx'></a> 发送数据
获取服务器传递到客户端的数据:
XMLHttpRequest: 原生ajax 对象
var xhr = new XMLHttpRequest();
// 设置请求头的类型post传参
// post 请求、传值到服务器
xhr.setRequestHeader('content-type','application/x-www-form-urlencoded')
xhr.open(method,url,true) // 设置请求的参数 false同步 | true 异步
请求的状态码:
200 成功
300
400 找后端 服务器问题
401
500 找后端 服务器问题
xhr.oneradystatechange = function(){
if(this.status == 200 && this.readyState ==4 ){
this.response : 服务器响应的数据
}
}
str = 'key=value&key2=value2'
xhr.send(str)
异步:独立一个线程
get:数据 附着在地址栏上
post: 数据存储在requestHeader()
异步通信:与服务器做数据交互
无刷新请求 :页面的局部刷新
1、异步的表单提交
2、接口调用
3、部分无刷新请求数据的特效
节流防抖:解决js事件高频触发的问题
请求太过频繁 对服务器造成的压力过大
click 事件 :2000ms 50次 1次
节流:在一个时间周期内,如果事件频繁的触发只允许1次
2000ms 50次 1次
1000ms 某个click只能触发一次?
防抖:在一个事件周期内,如果事件频发的触发只允许上一个事件周期允许的某一次执行
2000ms 50次 每2秒这个周期执行一次
?js 中 如何判断数组真的是数组
typeof(arr) //object
typeof(object) //object
typeof(null) //object
Array.isArray(arr) 返回true 就是数组
es6 类: 面向对象
class Person(){
}
es5 构造函数