Bom对象&cookie & session &

作者: 小7丁 | 来源:发表于2018-08-02 16:09 被阅读9次

    一、window.onload 和 document.onDOMContentLoaded 有什么区别?

    • window.onload事件触发时,页面上所有的DOM,样式表,脚本,图片,flash都已经加载完成了。

    • document.onDOMContentLoaded事件触发时,仅当DOM加载完成,不包括样式表,图片,flash。
      两者触发时机不同,window.onload触发的更晚。

      • 两事件的作用都是:当我们给一些元素绑定函数时,会出现绑定处理函数运行完了,但是元素还没有加载的情况。而window.onload事件和document.onDOMContentLoaded事件就是为了避免这种情况。
      • 保证在元素加载完成之后再处理绑定函数。
        document.onDOMContentLoaded加载机制更加合理。因为大多数客户可以允许图片,flash等的加载。

    二、如何获取图片真实的宽高?

    function $(selector) {
      return document.querySelector(selector);
    }
    $('img').onload = function (){
      console.log(this.width)
      console.log(this.height)
    }
    

    三、如何获取元素的真实宽高?

    function $(selector) {
      return document.querySelector(selector);
    }
    console.log(window.getComputedStyle($('.box')).width);
    
    console.log(window.getComputedStyle($('.box')).height);
    

    四、URL 如何编码解码?为什么要编码?

    • URL 编码的原则就是使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符。

      • 首先需要把该字符的 ASCII 的值表示为两个16进制的数字,然后在其前面放置转义字符("%"),置入 URL 中的相应位置。(对于非 ASCII 字符, 需要转换为 UTF-8 字节序, 然后每个字节按照上述方式表示)
    • javaScript提供四个URL的编码/解码方法。

    1. decodeURI()
    2. decodeURIComponent()
    3. encodeURI()
    4. encodeURIComponent()
    • URL只能使用ASCII字符集通过因特网进行发送,也就是说URL中只能包含英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号,所以URL中包含中文的部分必须编码之后使用。

    五、补全如下函数,判断用户的浏览器类型

    function isAndroid(){
        return /Android/.test(navigator.userAgent)
    }
    function isIphone(){
        return /Iphone/.test(navigator.userAgent)
    }
    function isIpad(){
        return /Ipad/.test(navigator.userAgent)
    }
    function isIOS(){
        return /(Iphone)|(Ipad)/.test(navigator.userAgent)
    }
    

    六、cookie & session &localStorage 分别是什么?

    cookie

    1. Cookie 是浏览器访问服务器后,服务器传给浏览器的一段数据。用来记录某些当页面关闭或者刷新后仍然需要记录的信息。

    2. 浏览器需要保存这段数据,不得轻易删除。cookie可以使用 js 在浏览器直接设置(用于记录不敏感信息,如用户名), 也可以在服务端通使用 HTTP 协议规定的 set-cookie 来让浏览器种下cookie,这是最常见的做法

    3. 此后每次浏览器访问该服务器,都必须带上这段数据。所以如果 cookie 太多太大对传输效率会有影响。

    session

    • session是一次浏览器和服务器的交互的会话,session是存在服务器的,用于区分会话和不同用户的访问。
    • 用户在输入用户名密码提交给服务端,服务端验证通过后会创建一个session用于记录用户的相关信息,这个 session 可保存在服务器内存中,也可保存在数据库中。
      • 创建session后,会把关联的session_id 通过setCookie 添加到http响应头部中。
      • 浏览器在加载页面时发现响应头部有 set-cookie字段,就把这个cookie 种到浏览器指定域名下。
      • 当下次刷新页面时,发送的请求会带上这条cookie, 服务端在接收到后根据这个session_id来识别用户。

    cookie & session 的不同:

    • cookie是存在浏览器的,根据请求的路径自动发送的,服务器端可以对其进行处理
    • session是存在服务器的,用于区分会话和不同用户的访问
      cookie 是存储在浏览器里的一小段「数据」,而session是一种让服务器能识别某个用户的「机制」,session 在实现的过程中需要使用cookie。

    localStorage

    1. localStorage HTML5本地存储web storage特性的API之一,用于将大量数据(最大5M)保存在浏览器中,保存后数据永远存在不会失效过期,除非用 js手动清除。
    2. 不参与网络传输。
    3. 一般用于性能优化,可以保存图片、js、css、html 模板、大量数据。

    六、使用 localStorage封装一个 Storage 对象,达到如下效果:

    Storage.set('name', '谷') 
    Storage.set('age', 2, 30) ;  //设置 name 字段存储的值为'谷'
    Storage.set('teachers', ['ruoyu', 'fangfang', 'tom'],  60)
    
    Storage.get('name')   // ‘谷’
    Storage.get('age')     //  如果不超过30秒,返回数字类型的2;如果超过30秒,返回 undefined,并且 localStorage 里清除 age 字段
    Storage.get('teachers')  //如果不超过60秒,返回数组; 如果超过60秒,返回undefined
    
    var Storage = (function(){
        return {
            set: function(key,value,expireSeconds){
                localStorage[key] = JSON.stringify({
                    value: value,
                    expired: expireSeconds===undefined?undefined:Data.now() + 1000*expireSeconds
                })
            },
            get: function(key){
                if(localStorage[key] === undefined){
                    return
                }
                var o = JSON.parse(localStorage[key])
                if(o.expired === undefined || Date.now() < o.expired){
                    return o.value
                }else{
                    delete locationStorage[key]
                }
            }
        }
    })
    

    相关文章

      网友评论

        本文标题:Bom对象&cookie & session &

        本文链接:https://www.haomeiwen.com/subject/brzrvftx.html