震惊!cookie竟然可以这也封装!

253 阅读1分钟

震惊!cookie这样封装你一定进大厂!

首先封装一个设置cookie的代码

    function setCookie(key, val, expires) {
        let now = new Date()
        now.setMinutes(now.getMinutes() + expires)
        document.cookie = `${key}= ${val};expires=` + now.toUTCString()
    }

然后封装一个删除cookie的代码

    function removeCookies(key) {
        setCookie(key, null, -1)
    }

最后设置一个获取cookie的代码

    function getCookie(key) {
        let obj = {}
        document.cookie.split('; ').forEach(r => {
            let kv = r.split('=')
            obj[kv[0]] = kv[1]
        })
        if (key) return obj[key]
        return obj
    }
    console.log(getCookie());

然后你就被阿里录取了

alt

但是就在此时你发现了一个bug,就是无法传字符串或者对象

所以我们做个小更改,在创建cookie的时候先做个判断

function setCookie(key, val, expires) {
        if (typeof val === 'object')
             val = JSON.stringify(val)
        let now = new Date()
        now.setMinutes(now.getMinutes() + expires)
        document.cookie = `${key}= ${val};expires=` + now.toUTCString()
     }

在获取cookie时也做个判断

function getCookie(key) {
        let obj = {}
        document.cookie.split('; ').forEach(r => {
            let kv = r.split('=')
            let res = null
            let val = decodeURI(kv[1])
            try {
                res = JSON.parse(val)
            } catch (error) {
                res = val
            }
            obj[kv[0]] = res
        })
        if (key) return obj[key]
        return obj
    }

然后你就进了阿里达摩院了!