2021.3.7差点忘了把笔记传上来,今天有点放松了一下。3.8加油!记得给妈妈个祝福。
_.isEqual
_.isEqual对两个值执行深度比较来确定是否它们是相等的
注意:此方法支持比较arrays, array buffers, booleans, date objects, error objects, maps, numbers, Object objects, regexes, sets, strings, symbols, typed arrays。Object对象会比较它们自身非继承可枚举的属性。不支持function和DOM节点的比较
相对比如果简单的值的话,不是对象的话,直接用Object.is()
用defineProperty实现vue的双向绑定
let obj = {}
/*
*obj 要劫持的对象
*name 要劫持对象的属性
*callback 劫持以后的操作
*/
function watch(obj, name, callback) {
let value = obj.name
Object.defineProperty(obj, name, {
set(msg) {
// 触发setter给obj赋值
value = msg
//执行劫持后的操作
callback(value)
},
get() {
//返回获取属性值
return value
}
})
}
//
function doSomething(value) {
document.querySelector('div').innerHTML = value
document.querySelector('input').value = value
}
//监听input变化
//可以参考全兼容版:https://segmentfault.com/a/1190000017524278
document.querySelector('input').addEventListener('input', (e) => {
obj['msg'] = e.target.value
})
watch(obj, 'msg', doSomething)
Object.is的es5构造方法如下:
(function() {
Object.defineProperty(Object,'is', {
value: function(value1, value2) {
if(value1 === value2) return value1 !== 0 || 1 / value1 === 1 / value2;
return value1 !== value1 && value2 !== value2;
},
writable: true,
configurable: true,
enumerable: false
})
null 和undefined不能变成对象,会报错
解构赋值是浅复制,所以,只会复制他的引用,具体值是不会复制过来的
深复制对象:
const clone=Object.assign(
Object.create(Object.getPrototypeOf(obj)),
obj
)
instanceof 比较左边值的__proto__ 和右边值的prototype 是否相等
即a instancof A 检查a的原型链中是否存在A.prototype
这道题需要留意一下:链接在此
.slice(1,-1)去头去尾
获得constructor的参数列表:
var c=a.constructor
.toString()
.match(/(.*)/)
.pop()
.slice(1,-1)
.split(',');
["arg1", "arg2"]
注意一个知识点:基本数据类型值不可变。

浙公网安备 33010602011771号