1、基本数据类型,引用数据类型
说起深拷贝浅拷贝,必须先说数据类型。在拷贝数据的时候才能看出真正差异。
基本数据类型:
string,number,boolean,undefined,null,
基本数据类型:直接存储在栈(stack)中的数据
引用(对象)数据类型:
Array,Object
引用(对象)数据类型:存储的是该对象在栈中引用,真实的数据存放在堆内存里
引用(对象)数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。
2、深拷贝、浅拷贝
深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。
浅拷贝是对数据的应用层的拷贝,拷贝的数据发生变化,原来的数值也发生变化。
示例:
深拷贝是对数据的完全拷贝,复制了引用层和真正的值,拷贝的数据发生变化,原来的数据不变,和原来的数据不相关。
深拷贝方法:利用Json对象中的parse和sringfy.
示例
let originArray = [1,2,3,4,5];
let cloneArray = JSON.parse(JSON.stringify(originArray));
3、promise
从语法上讲,promise是一个对象,从他可以获取异步操作的消息,从本意上讲,他是一个承诺,过段时间会给你一个结果。
promise是一个构造函数,有2个入参,resolve:异步操作成功之后的回调函数,reject异步操作执行失败之后的操作。还有.then .catch
完整实例:
function ajax(URL) {
return new Promise(function (resolve, reject) {
var req = new XMLHttpRequest();
req.open('GET', URL, true);
req.onload = function () {
if (req.status === 200) {
resolve(req.responseText);
} else {
reject(new Error(req.statusText));
}
};
req.onerror = function () {
reject(new Error(req.statusText));
};
req.send();
});
}
var URL = "/try/ajax/testpromise.php";
ajax(URL).then(function onFulfilled(value){
document.write('内容是:' + value);
}).catch(function onRejected(error){
document.write('错误:' + error);
});