reduce实现Map
function myMap(fn) {
return this.reduce((cur, next) => [...cur, fn(next)], [])
}
Array.prototype.myMap = myMap
const arr = [1, 2, 3, 4]
console.log(arr.myMap(item => item * 2))
for in 和 for of区别
1,for in 遍历的是key,for of遍历的是value
2,for in可用于对象数组字符串,但是不能遍历set Map;for of可以遍历Map,Set,但是不能遍历普通对象,可以将普通对象添加迭代器后进行遍历
filter在链式中可以使用filter(Boolean)来进行过滤不为真的项
判断数组
obj.__proto__ === Array.prototype;
Array.isArrray(obj);
obj instanceof Array;
Array.prototype.isPrototypeOf(obj);
Object.prototype.toString.call(obj).slice(8, -1) === "Array";
es6中Proxy(对对象的设置进行拦截代理)
const obj = {
a: 'A',
b: 'B',
c: 'C'
};
const proxyObj = new Proxy(obj, {
set: (target, key, value) => {
console.log('set');
target[key] = value;
},
get: (target, key) => {
console.log('get');
return target[key];
},
deleteProperty: (target, key) => {
console.log('delete');
delete target[key];
}
});
proxyObj.d = 'D';
console.log(proxyObj);
console.log(proxyObj['d']);
delete proxyObj.d;
console.log(proxyObj);
es6中Reflect反射(将对象原始方法暴露出来)
const obj = {
a: 'A',
b: 'B',
c: 'C'
};
console.log(Reflect.has(obj, 'a'));
Reflect.set(obj, 'd', 'D');
console.log(obj);
Reflect.defineProperty(obj, 'e', {});
console.log(obj);
console.log(Reflect.get(obj, 'd'));