js笔记
2019-07-29 本文已影响0人
邹小邹大厨
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"
}