1.异步编程
async function async1() {
console.log("async1 start");
await async2();
console.log("async1 end"); }
async function async2() {
console.log("async2");
}
console.log("script start");
setTimeout(function () {
console.log("settimeout");
}, 0);
async1();
new Promise(function (resolve) {
console.log("promise1");
resolve();
}).then(function () {
console.log("promise2");
});
console.log("script end");
/*
打印顺序如下:
script start
async1 start
async2
promise1
script end
async1 end
promise2
settimeout
*/
2.reduce迭代器
var a = [3,2,1].reduce(Math.pow);
var b = [1,2,3].map(parseInt);
/* parseInt('1', 0); // radix为0时,使用默认的10进制。
parseInt('2', 1); // radix值在2-36,无法解析,返回NaN
parseInt('3', 2); // 基数为2,2进制数表示的数中,最大值小于3,无法解析,返回NaN
map函数返回的是一个数组,所以最后结果为[1, NaN, NaN] */
console.log(a);
console.log(b);
3.对象的深度复制
var clone = function(obj) {
var target = {};
for(var key in obj) {
if(obj.hasOwnProperty(key)) {
if(typeof obj[key] == 'object') {
target[key] = clone(obj[key]);
}else {
target[key] = obj[key];
}
}
}
return target;
}
var arr = {
4:1,
b:3,
c:33,
3:{
m:23
}
};
var a = clone(arr);
a[2] = 5;
console.log(arr);
console.log(a);
var deepClone = function (obj) {
var newObj = obj instanceof Array ? [] : {};
for(var i in obj) {
newObj[i] = typeof obj[i] == 'object' ? deepClone(obj[i]) : obj[i];
}
return newObj;
}
var arr = [1,2,3];
console.log(arr);
var a = deepClone(arr);
a[2] = 4;
console.log(a);