js笔记

typeof 和instantof

1, typeof 对于对象除了函数都会显示object

类型转换

1, 数组转数字,空数组伟0,只有一个的数字转数字

2, 对象转原始类型的时候,直接是调用Symbol.toPrimitive,可以复写Symbol.toPrimitive

let a = {
  valueOf() {
    return 0
  },
  toString() {
    return '1'
  },
  [Symbol.toPrimitive]() {
    return 2
  }
}
1 + a // => 3

3,字符串转数字的时候,如果是数字字符串则转为数字,否则为NAN

闭包

1,setTimeout 可以接受第三个参数,用来穿参数

setTimeout(
    function timer(j) {
      console.log(j)
    },
    i * 1000,
    i
  )

深拷贝

1,MessageChannel
2, Object.keys()返回对象的enum属性,Reflect.ownKeys()返回所有symbol属性

let const var

1, 使用let 和const声明的变量不会被挂在到window上面

Proxy

let p = new Proxy(target, handle)

Reflect

1,Reflect.get(target, name, receiver)
如果get 设置了get函数,则会绑定到receiver

var myObject = {
  foo: 1,
  bar: 2,
  get baz() {
    return this.foo + this.bar;
  },
};

var myReceiverObject = {
  foo: 4,
  bar: 4,
};

Reflect.get(myObject, 'baz', myReceiverObject) // 8

let p = {
  a: 'a'
};

let handler = {
  set(target, key, value, receiver) {
    console.log('set');
    console.log(receiver)
    Reflect.set(target, key, value, receiver)
  },
  defineProperty(target, key, attribute) {
    console.log('defineProperty');
    console.log(target, key, attribute)
    Reflect.defineProperty(target, key, attribute);
  }
};

let obj = new Proxy(p, handler);
obj.a = 'B';

// 打印出来
"set"
Object {
  a: "a"
}
"defineProperty"
Object {
  a: "a"
} "a" Object {
  value: "B"
}

你可能感兴趣的:(js笔记)