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"]


理解闭包的题目:理解
题目一


js的延迟加载


注意一个知识点:基本数据类型值不可变。

posted @ 2021-03-08 00:08  梦中少女的心  阅读(52)  评论(0)    收藏  举报