SOURCE

console 命令行工具 X clear

                    
>
console
const arr = [1,2,3,4,5,6,6,6]
const obj = {
    name:'漳卅四年'
}


// 深拷贝
function deepClone(obj) {
    if(obj === null) return obj
    if(obj.instanceof === Date) return new Date(obj)
    if(obj.instanceof === RegExp) return new RegExp(obj)
    if(typeof obj !== "object") return obj
    const cloneObj  = new obj.constructor()
    Object.keys(obj).forEach(key=>{
        if(obj.hasOwnProperty(key))
            cloneObj[key] = deepClone(obj[key])
    })
    return cloneObj
}
const cloneObj = deepClone(obj)
cloneObj.name = "我是深拷贝"
console.log(cloneObj)


// 防抖
const btn = document.getElementById("btn")
let timer = null
btn.addEventListener("click",()=>{
    if(timer) clearTimeout(timer)
    timer = setTimeout(()=>{
        console.log("这是防抖")
    },1000)
})


// 节流
const btn2 = document.getElementById("btn2")
let flag = false
btn2.addEventListener('click',()=>{
    if(flag) return
    flag = true // 打开节流阀
    setTimeout(()=>{
        console.log("这是节流")
        flag = false // 代码执行完毕 关闭节流阀
    },500)
})


// 内存泄漏
function fn(){
    name = "张三"
}
// console.log(window.name)


// 数组类型判断
console.log(arr instanceof Array)
console.log(obj instanceof Object)

console.log(arr.__proto__ === Array.prototype)
console.log(obj.__proto__ === Object.prototype)
console.log(arr.constructor === Array)

console.log(Object.prototype.toString.call(arr).includes("Array"))

console.log(Array.isArray(arr))


// 类数组转数组
const _arr = document.querySelectorAll('div')
console.log(_arr)
console.log(Array.prototype.slice.call(_arr))
// console.log(Array.prototype.splice.call(_arr,0))
console.log(Array.prototype.concat.apply([],_arr))
console.log(Array.from(_arr))


// 去重
console.log([...new Set(arr)])
console.log(arr.filter((item,index)=>arr.indexOf(item)===index))


// 获取数组最多的一项
const obj1 = {}
arr.forEach(item=>obj1[item]?obj1[item]++:obj1[item]=1)
const result = Object.keys(obj1).sort((a,b)=>obj1[b]-obj1[a]).filter((item,index,arr)=>obj1[item]===obj1[arr[0]])
console.log(result)


// 普通对象转成可迭代对象
Object.prototype[Symbol.iterator] = function(){
    return Object.values(this)[Symbol.iterator]()
}


// for...in 和 for...of的区别?
Object.prototype.age = 20
for(let key in obj){console.log(key)}
for(let value of obj){console.log(value)}

<div class="parent">
    <div class="child">
        <button id="btn">防抖</button>
        <button id="btn2">节流</button>
    </div>
</div>
.parent{
    width: 200px;
    height: 200px;
    background-color:  red;
    display: flex
}

.child {
    /* width: 100px;
    height: 100px;
    background-color: green; */
    margin: auto
}

本项目引用的自定义外部资源