cookit的知识点

63 阅读4分钟

Cookie

  • 浏览器有一个安全策略,禁止浏览器自动读取本地文件,禁止跨域,
  • 浏览器不能读取本地的文件,进行读取,操作;自动默认只能下载到window的下载路径
  • cookie 存储的必须是字符串
  • cookie 是一个临时的数据,浏览器彻底关闭后就会被删除
  • cookie 可以在同一个域下的文件直接互相共享
  • cookie 必须是web服务状态下打开的页面才有,本地直接打开无法使用
  • cookie 属性名相同的时候是覆盖的,仅能存储5K(5*1024字节)数据
document.cookie="a=1"
document.cookie="a=2"
  • 表单提交/超链接跳转的时候也会携带cookie,往返于服务器和客户端之间,必须客户端和服务端是同一个域下
  • cookie也是有路径区分,父路径不能访问子路径下的cookie子路径可以访问父路径下的内容;可以使用path设置将子路径的cookie设置在跟中
        document.cookie="age=30"
        document.cookie="sex=男;path=/"
        document.cookie="hobby=读书;path=./a"
        console.log(document.cookie)
// 将得到的cookie转换成对象
        function getCookie(){
            return document.cookie.split(";").reduce((v,t)=>{
                var arr=t.split("=");
                v[arr[0].trim()]=arr[1];
                return v;
            },{})
        }

如何长期存储cookie

var date=new Date();
document.cookie="a=1;expires="+date.toUTCString();
// expires   通过设置expires设置时间,可以设置cookie失效时间
  • 谷歌只能存储到2024年,是因为谷歌执行了替换计划

webstorage

  • localstorage :永久存储,手动删除才会被删除,同域下所有位置共享数据,不区分文件夹路径,存储大小为5M;不会主动携带往返于服务器之间
  • sessionStorage:临时存储,同文件不同窗口下都不共享数据,关闭浏览器会自动销毁,存储大小为5M,也不会主动携带往返于服务器之间
  • localstorage.length 存储的多少数据
  • localstorage.setItem("user","zhangsan") 或者 localstorage.user="zhangsan" 存储数据
  • localstorage.user 或者 localstorage.getItem("user") 获取数据
  • localstorage.removeItem 或者 delete localstorage.user 删除数据
  • localstorage.clear 清除所有

localStorage.user="zhangsan" 与 sessionStorage.user="zhangsan" 的两者区别

localstorage

  • token
  • 存储较小共有库
  • 事件触发

webstorage

  • 事件监听改变页面中传送数据

promise

  • 对于面向过程的程序员进行开发,解决了回调地狱的问题

多线程,多进程,集群

多进程:双开

多线程:一个应用同时运行多个内容

集群:通过升级的服务器来进行存储

云:将大家的服务器都进行存储

异步的代码 面向过程的代码iu是一条直线

async与await

  • resolve 参数是一个回调函数 当异步执行成功后可以执行resolve,表示执行成功
  • reject 参数是一个回调函数 当异步执行失败后可以执行reject,表示执行失败

链式结构

        var arr=[];
        getImage("./img/110101.jpg")
        .then(function(img){
            arr.push(img);
            return getImage("./img/110102.jpg");
        }).then(function(img){
            arr.push(img); 
            return getImage("./img/110103.jpg");
        }).then(function(img){
            arr.push(img);
            console.log(arr)
        })
        // 如果有两个函数,则一个是成功,另外一个是失败执行的函数
        getImage("./img/110101.jpg").then(function(){
            console.log("成功")
        },function(){
            console.log("失败")
        })
  • 典型的回调地狱
        var img = new Image();
        img.src = "./img/110101.jpg";
        img.onload = function () {
            arr.push(img);
            var img = new Image();
            img.src = "./img/110102.jpg";
            img.onload = function () {
                arr.push(img);
                var img = new Image();
                img.src = "./img/110103.jpg";
                img.onload = function () {
                    arr.push(img);
                }
                img.onerror = function () {
                    reject("错误的地址")
                }
            }
            img.onerror = function () {
                reject("错误的地址")
            }
        }
        img.onerror = function () {
            reject("错误的地址")
        }

try...catch

try{
    // 尝试执行,如果正确执行完成后执行finally,如果执行错误执行catch,然后在执行finally
}catch(e){
    // 只有在try执行错误时才会执行这里
}finally{
    // 任何时候最后都会执行finally
}
        var a=1;
        try{
            a++;
            a+=b;  // b不存在报错,
            a*=2;
        }catch(e){
           a++;
        }finally{
            a++;
        }
        console.log(a) // 4
        var a=1;
        var b=2;
        try{
            a++;
            a+=b;
            a*=2;
        }catch(e){
           a++;
        }finally{
            a++;
        }
        console.log(a)
        try{
            getImage("./img/110234.jpg").then(function(img){
                console.log(img)
            })
        }catch(e){
            console.log("aaaaa")
        }
  • Promise使用自身的catch做检查

promise的静态方法

resolve

  • Promise.resolve() 返回一个Promise 两者相同
        //  Promise.resolve()  返回一个Promise
        Promise.resolve().then(function(){
            console.log("aaa")
        })
        // Promise.resolve()相当于下面的函数
        function fn(){
            return new Promise(function(resolve,reject){
                resolve();
            })
        }

reject

  • Promise.reject()方法返回一个带有拒绝原因的 Promise 对象。 两者相同
        Promise.reject().catch(function(){

         })
        function fn(){
            return new Promise(function(resolve,reject){
                reject();
            })
        }

all

典型案例 -- 异步过程中加载数据

  • 同时让多个异步去执行,并不是一个完成了在完成第二个,不是顺序的,而是并行
        function getImage(src) {
            return new Promise(function (resolve, reject) {
                var img = new Image();
                img.src = src;
                img.onload = function () {
                    // 只能传一个参数
                    resolve(img);
                }
                img.onerror = function () {
                    reject("错误的地址")
                }
            })
        }

var arr=Array(3).fill(1).map((n,i)=>getImage(`./img/11010${i+1}.jpg`));
// 按Promise数组的顺序完成所有异步过程,然后将每个返回的结果放在一个新数组中,并且返回这个新数组
Promise.all(arr).then(function(list){
     console.log(list);
})

rece

  • 返回一个数据,根据执行的速度返回
        function getImage(src) {
            return new Promise(function (resolve, reject) {
                var img = new Image();
                img.src = src;
                img.onload = function () {
                    // 只能传一个参数
                    resolve(img);
                }
                img.onerror = function () {
                    reject("错误的地址")
                }
            })
        }

var arr=Array(3).fill(1).map((n,i)=>getImage(`./img/11010${i+1}.jpg`));
// 给入一个异步的Promise的数组,谁先完成异步过程,返回这个先完成的数据
Promise.race(arr).then(function(img){
    console.log(img)
})

通过promise实现红绿灯

        function showlight(light, time) {
            return new Promise(function (resolve, reject) {
                setTimeout(function () {
                    console.log(light);
                    resolve();
                }, time)
            })
        }

        function fn() {
            showlight("红灯", 2000).then(function () {
                return showlight("黄灯", 1000)
            }).then(function () {
                return showlight("绿灯", 2000)
            }).then(function () {
                fn()
            })
        }
        fn();