#先前有学习过javaScript,现在项目有需求,在重写复习一边,下面是整理的一些js的知识点
Cookie
1> 部分函数
方法名 | 参数列表 | 内容 | 返回值 | 注意 |
---|---|---|---|---|
window.document.cookie | 无参 | 获取所有的cookie | 以字符串的形式获取到的所有cookie。 | 格式:“name1:value1; name2:value2”,分割的中间有空格 |
window.document.cookie.indexOf | string,int | 从int指定的位置开始往后查找string的位置 | 查找到的字符的坐标,如果没有找到则返回-1 | |
document.cookie.index | String str | 查找string出现的位置 | 查找到的字符的坐标,如果没有找到则返回-1 | 如果是查找CookieName,则需要加上“=”进行查找,否则可能会查找到value值里面的坐标 |
document.cookie.substring | start_int,end_int | 从指定的开始坐标向后截取到结束坐标 | 截取到的字符串 | |
escape | String str | 编码除字母、数字和ASCII编码的字符 | 编码后的字符串 | 它能将一些特殊符号使用十六进制表示,例如空格将会编码为“20%”,从而可以存储于cookie值中,而且使用此 种方案还可以避免中文乱码的出现。使用unescape解码 |
window.location.href | String url | 在当前页面打开一个url | new page | window.location.href=window.location.href;等同刷新;“window.location.href”、"location.href"是本页面跳转;"parent.location.href"是上一层页面跳转;"top.location.href"是最外层的页面跳转 |
2> 添加cookie
function addCookie(objName, objValue, objHours){//添加cookie
var str = objName + "=" + escape(objValue);
if (objHours > 0) {//为0时不设定过期时间,浏览器关闭时cookie自动消失
var date = new Date();
var ms = objHours * 3600 * 1000;
date.setTime(date.getTime() + ms);
str += "; expires=" + date.toGMTString();
}
document.cookie = str;
alert("添加cookie成功");
}
3> 通过cookie的名字获取cookie的值
function getCookie(objName){//获取指定名称的cookie的值
var arrStr = document.cookie.split("; ");
for (var i = 0; i < arrStr.length; i++) {
var temp = arrStr[i].split("=");
if (temp[0] == objName)
return unescape(temp[1]);
}
}
4> 通过cookie的名字删除cookie
function delCookie(name){//为了删除指定名称的cookie,可以将其过期时间设定为一个过去的时间
var date = new Date();
date.setTime(date.getTime() - 10000);
document.cookie = name + "=a; expires=" + date.toGMTString();
}
***
js
1> 运行期上下文
js的function在创建时会创建一个内部对象,被称作“运行期上下文”。一个“运行期上下文”定义了一个函数运行时依赖的环境。
对函数的每次运行而言,每个运行期上下文都是独一无二的,所以当一个函数被重复调用时,会反复创建运行期上下文。运行期上下文在函数执行完毕时被销毁
2> js的加载
- 大多数浏览器使用单线程处理UI更新和JavaScript运行等任务,那么在对js进行解析时,浏览器的页面加载会被阻塞。这会导致加载页面之初会呈现一段时间的空白,只有当js加载完成时,浏览器才会去继续加载页面
- 解决方法:
- 将
代码
<script type="text/javascript">
function loadScript(url,callback){
var script = document.createElement("script");
script.type="text/javascript";
if(script.readyState){
script.onreadystatechange = function(){
if(script.readyState == "loaded" || script.readyState == "complete"){
script.onreadystatechange = null;
callback();
}
};
}else{
script.onload = function(){
callback();
};
}
script.src = url;
document,getElementByTagName_r("head")[0].appednChild(script);
}
loadScript("the-rest.js",function(){
Application.init();
});
</script>
3> 严格模式
- 在整个脚本的第一行使用"user strict",将会使脚本的运行进入严格模式。严格来说,是放在产生实际运行结果之前,如放在一个空的分号后面。
- 在函数的第一行使用"user strict",将会函数的运行进入严格模式
- 语法和行为改变
(1) 严格模式下,使用变量必须先显示声明。在正常模式下,如果一个变量没有声明就赋值,则会默认其为全局变量。
(2) 严格模式下的静态绑定 -
禁止使用while语句。因为while语句无法在编译时确定属性的所属
-
创设eval作用域。在正常模式下,eval的作用域取决于所处的作用域,也就是说:在正常模式下没有eval作用域。在严格模式下,会为eval语句创建eval作用域,eval里面定义的变量只能在eval中使用.
(3) 增强的安全措施
1. 禁止this关键字指向全局变量。在正常模式下,this指向全局变量,严格模式下为undefined。因此,使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。
2. 禁止在函数内部遍历调用栈。f1.caller和f1.arguments会报错
3. 禁止删除变量,只有configurable设置为true的对象属性,才能被删除。
4. 显示报错。如正常模式下,对一个只读属性赋值,只会失败不会报错。在严格模式下会报错
5. 重名错误。严格模式下,参数列表和同一作用域下属性不能重复定义