1、sessionStorage 、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也是在所有同源窗口中都是共享的。
2、JavaScript中什么是捕捉事件和冒泡事件?
事件冒泡是指对象嵌套时,底层事件处理完以后是否向上层对象传递。事件冒泡是为了逐级响应事件,即事件由子元素向祖先元素传播的,例如:
从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 : 冒泡阶段
3、Ajax异步传输数据—页面格式
首先在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代码
4、JSON数据交换格式?
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)。第二个参数为传入到函数中的参数数组(必须为数组)。
6、js调用函数返回一个数组,如何将该数组的内容一条条写进页面内?
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>