zoukankan      html  css  js  c++  java
  • XX宝面试题——JS部分

    1sessionStorage localStorage cookie 之间的差别

    sessionStorage 和 localStorage 是HTML5 Web Storage API 供给的,可以便利的在web恳求之间保存数据。

    共同点:都是在浏览器端存储的数据,且同源的。

    差别: cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。

    cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。

    存储大小限制也不同。cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。

    数据有效期不同。sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。

    作用域不同。sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。

    2JavaScript中什么是捕捉事件和冒泡事件?

    事件冒泡是指对象嵌套时,底层事件处理完以后是否向上层对象传递。事件冒泡是为了逐级响应事件,即事件由子元素向祖先元素传播的,例如:

    从div-body-html-document,Code:<div id="divid" onclick="点击object"></div>

    事件捕捉是在指定的事件发生时,给出处理的方法,比如说鼠标点击、移动等;事件捕获是为了逐层确定事件的来源,即事件由祖先元素向子元素传播,例如:

    从document-html-body-div,Code:document.getElementById("divid")

    像firefox、chrome、safari这类标准浏览器中,事件传播存在捕获阶段。

    适用于标准浏览器的addEventListener则有三个参数,addEventListener(type,fn,boolean),前面两个参数不解释,第三个参数boolean,就是决定注册事件发生在捕获阶段还是冒泡阶段,具体参考如下:true : 捕获阶段    false : 冒泡阶段

    3Ajax异步传输数据—页面格式

    首先在jquery框架下使用ajax很方便。导入jquery.js 后,一进入页面就加载Ajax 
    <script> 
    $.ajax({ 

        type:"post",
        url:'',//写 '××××.action' 
        data:''//写的是传递参数相当于?id="";

        success:function(msg){ 
             alert(msg);//输出从后台传过来的数据流 
        }, 
        error:function(){ 
             alert("loading failed...") 
        } 
    }); 
    </script> 

    例如:Java代码  

    4JSON数据交换格式?

    JSON有两种结构:

     1. “名称/值”对的集合(name/value)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list)或者关联数组(associative array)。

    例如:JSON 表示"名称 / 值对":

      { "firstName": "Brett" } 

    创建包含多个"名称 / 值对"的 记录,比如:

         { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }

    2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。

    例如:使用 JSON,就只需将多个带花括号的记录分组在一起:

      { "people": [

      { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },

      { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},

      { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }

    ]}

         将 JSON 数据赋值给变量

      例如,创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它:

    var people = { "programmers": [

         { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },

      { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },

      { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }

      ],

      "authors": [

      { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },

      { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },

      { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }

      ],

      "musicians": [

      { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },

      { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }

      ] }

      现在 people包含前面看到的 JSON 格式的数据。但是,访问数据的方式还不明显。

         访问数据

      上面的长字符串实际上只是一个数组;将这个数组放进 JavaScript 变量之后,就可以很轻松地访问它。实际上,只需用点号表示法来表示数组元素。所以,要想访问 programmers 列表的第一个条目的姓氏,只需在 JavaScript 中使用下面这样的代码:

      people.programmers[0].lastName;

      注意,数组索引是从零开始的。所以,这行代码首先访问 people变量中的数据;然后移动到称为 programmers的条目,再移动到第一个记录([0]);最后,访问 lastName键的值。结果是字符串值 “McLaughlin”。

      下面是使用同一变量的几个示例。

      people.authors[1].genre // 值为 "fantasy"

      people.musicians[3].lastName // 未定义

    people.programmers[2].firstName // 值为"Elliotte"

         转换回字符串

      将对象转换回文本格式,在 JavaScript 中这种转换也很简单:

          String newJSONtext = people.toJSONString();

    5、用js编写函数,输出数组中最大的数

    function getMaximin (arr,maximin) {
        if (maximin == "max") {
             return Math.max.apply(Math, arr);
        }else if (maximin == "min") {
             return Math.min.apply(Math, arr);
        }

    }
    var a = [3,2,4,2,10]
    var b = [12,4,45,786,9,78]

    alert("aMax:" + getMaximin(a,"max") + "---aMin:" + getMaximin(a,"min") + "---bMax:" + getMaximin(b,"max") + "---bMin:" + getMaximin(b,"min"))   //aMax:10---aMin:2---bMax:786---bMin:4

     

    var max = Math.max.apply(Math,values); 意思执行Math对象中的max函数,参数为values,并将返回结果赋值于max,其中apply 函数为JS的内置函数,作用为执行该函数,且只能被函数调用。

    apply函数中的第一个参数为函数所属对象,通常为当前页面(this)。第二个参数为传入到函数中的参数数组(必须为数组)。

    6js调用函数返回一个数组,如何将该数组的内容一条条写进页面内?

    var arr=你的数组;

    for(var i=0;i<arr.length;i++)

    {

       $("#写的html位置的父节点ID").innerhtml=arr[i];

    }

    7、用js编写函数,实现字符串反转

    方法1:

    <script type="text/javascript">

    var str="abcdeg";

    function demo(str){

        var str2="";

        for(var i=0;i<str.length;i++){

             str2+=str.charAt(str.length-i-1);

        }

        document.write(str+"<br />"+str2)

    }

    demo(str);

    </script>

    方法2:

    <input type="textfield" id="input"/>

    <div id="result"></div>

    <input type="button" value="reverse" onclick="reverse()"/>

    <script language="javascript">

    function reverse(){

        var str=document.getElementById("input").value;

        var a=str.split('');

        var result=new Array();

        while(a.length)

        {

            result.push(a.pop());

         }

         document.getElementById("result").innerHTML=result.join('');

    }

    </script>

     

  • 相关阅读:
    【WEBAPI】Passing multiple POST parameters to Web API Controller Methods
    【WEBAPI】常用参数传递方法总结
    JavaScript面向对象静态方法私有方法公有方法特权方法
    javascript 封装
    javascript 获取 浏览器body高宽
    Fiddler 教程
    预加载下一张图片
    div页面居中
    关于模块化加载
    chrome本地不能操作iframe
  • 原文地址:https://www.cnblogs.com/limeiky/p/4743689.html
Copyright © 2011-2022 走看看