js知识点

113 阅读1分钟

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;
//通过ES6的Array.isArray()做判断
Array.isArrray(obj);
//通过instanceof做判断
obj instanceof Array;
//通过Array.prototype.isPrototypeOf
Array.prototype.isPrototypeOf(obj);
//通过Object.prototype.toString.call()做判断\
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'
};

// 原来的in变为现在has
console.log(Reflect.has(obj, 'a'));

//Reflect.set()给对象赋值
Reflect.set(obj, 'd', 'D');
console.log(obj);

//Object.defineProperty改由现在的Reflect中的Reflect.defineProperty
Reflect.defineProperty(obj, 'e', {});
console.log(obj);

//对象的获取值改为Reflect的get
console.log(Reflect.get(obj, 'd'));