大家好,小编来为大家解答以下问题,javascript高级程序设计第五版 pdf,javascript高级程序设计pdf百度云,今天让我们一起来看看吧!
目录
一、Exception
1.异常概述
当错误发生时,JavaScript 提供了错误信息的内置 error 对象。
error 对象提供两个有用的属性:name
和 message
属性名 | 描述 |
---|---|
name | 设置或返回错误名 |
message | 设置或返回错误消息 |
name属性的返回值:
返回值 | 描述 |
---|---|
EvalError | 已在 eval() 函数中发生的错误 |
RangeError | 已发生超出数字范围的错误 |
ReferenceError | 已发生非法引用 |
SyntaxError | 已发生语法错误 |
TypeError | 已发生类型错误 |
URIError | 在 encodeURI() 中已发生的错误 |
2.异常捕捉
try-catch 方法:
语法格式:
try {
// 可能发生异常的代码
} catch (error) {
// 发生错误执行的代码
} finally {
// 无论是否出错都会执行的代码
}
注:在 try…catch 中,try 中一旦出现错误则其它语句不能执行,如果不出现错误则 catch 中的语句不会执行
3.异常抛出
在检测到一些不合理的情况发生的时候也可以主动抛出错误
throw 可以主动抛出异常
注:
- thow后面跟我们要抛出的异常对象
- 只要有异常对象抛出,不管是浏览器抛出的,还是代码主动抛出,都会让程序停止执行Python中的所有运算符号。如果想让程序继续执行,则有也可以用try…catch来捕获。
- 每一个错误类型都可以传入一个参数,表示实际的错误信息。
- 我们可以在适当的时候抛出任何我们想抛出的异常类型。
语法:
throw new SyntaxError("语法错误...");
二、JSON
1.JSON概述
JSON 是一种存储和交换数据的语法。
JSON 是通过 JavaScript 对象标记法书写的文本
数据交换:
- 当数据在浏览器与服务器之间进行交换时,这些数据只能是文本。
- JSON 属于文本,并且我们能够把任何 JavaScript 对象转换为 JSON,然后将 JSON 发送到服务器。
- 我们也能把从服务器接收到的任何 JSON 转换为 JavaScript 对象。
- 以这样的方式,我们能够把数据作为 JavaScript 对象来处理,无需复杂的解析和转译。
语法规则:
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号容纳对象
- 方括号容纳数组
数据:
JSON 数据写为名称/值对
"名称":"值"
注:
- JSON 名称需要双引号。而 JavaScript 名称不需要。
- 在 JSON 中,键必须是字符串,由双引号包围
- 在 JavaScript 中,键可以是字符串、数字或标识符名称
JSON 值:
在 JSON 中,值必须是以下数据类型之一:
- 字符串
- 数字
- 对象(JSON 对象)
- 数组
- 布尔
- null
在 JavaScript 中,以上所列均可为值,外加其他有效的 JavaScript 表达式,包括:
- 函数
- 日期
- undefined
注:JSON值不能为 函数,日期,undefined
通过 JavaScript,您能够创建对象并向其分配数据
var person = { name : "Bill Gates", age : 62, city : "Seattle" };
// 返回 Bill Gates
person.name;
2.JSON数据类型
(1)、JSON字符串
{"name": "John"} //字符串必须用双引号包围
(2)、JSON数字
{"age": 30} //必须是整数或浮点数
(3)、JSON对象
{
"employee": {"name": "Bill Gates", "age": 62, "city": "Seattle"}
}
//JSON 中作为值的对象必须遵守与 JSON 对象相同的规则
(4)、JSON数组
{
"employees": ["Bill", "Steve", "David"]
}
(5)、JSON布尔
{"sale": true}
(6)、JSON null
{"middlename": null}
(7)、JSON字符串转JS对象
JSON.parse()方法:
可以将以JSON字符串转换为JS对象,它需要一个JSON字符串作为参数,会将该字符串转换为JS对象并返回
var obj = JSON.parse(jsonStr);
(8)、JS对象转JSON字符串
JSON.stringify()方法:
可以将一个JS对象转换为JSON字符串,需要一个js对象作为参数,会返回一个JSON字符串
var jsonStr = JSON.stringify(obj);
(8)、JSON PHP
客户端与 PHP 服务器之间交换 JSON 数据
详细请查看:JSON PHP
三、AJAX
1.AJAX概述
AJAX 是开发者的梦想,因为您能够:
- 不刷新页面更新网页
- 在页面加载后从服务器请求数据
- 在页面加载后从服务器接收数据
- 在后台向服务器发送数据
AJAX 如何工作:
- 网页中发生一个事件(页面加载、按钮点击)
- 由 JavaScript 创建 XMLHttpRequest 对象
- XMLHttpRequest 对象向 web 服务器发送请求
- 服务器处理该请求
- 服务器将响应发送回网页
- 由 JavaScript 读取响应
- 由 JavaScript 执行正确的动作(比如更新页面)
2.XMLHttpRequest对象
Ajax 的核心是 XMLHttpRequest 对象
所有现代浏览器(Chrom、IE7+、Firefox、Safari 以及 Opera)都有内建的 XMLHttpRequest 对象。
创建 XMLHttpRequest 的语法是:
variable = new XMLHttpRequest();
老版本的 Internet Explorer(IE5 和 IE6)使用 ActiveX 对象:
variable = new ActiveXObject("Microsoft.XMLHTTP");
XMLHttpRequest 对象方法:
方法 | 描述 |
---|---|
new XMLHttpRequest() | 创建新的 XMLHttpRequest 对象 |
abort() | 取消当前请求 |
getAllResponseHeaders() | 返回头部信息 |
getResponseHeader() | 返回特定的头部信息 |
open(method, url, async, user, psw) | 规定请求
|
send() | 将请求发送到服务器,用于 GET 请求 |
send(string) | 将请求发送到服务器,用于 POST 请求 |
setRequestHeader() | 向要发送的报头添加标签/值对 |
XMLHttpRequest对象属性:
属性 | 描述 |
---|---|
onreadystatechange | 定义当 readyState 属性发生变化时被调用的函数 |
readyState | 保存 XMLHttpRequest 的状态。
|
responseText | 以字符串返回响应数据 |
responseXML | 以 XML 数据返回响应数据 |
status | 返回请求的状态号
如需完整列表请访问 Http 消息参考手册 |
statusText | 返回状态文本(比如 “OK” 或 “Not Found”) |
3.get和post请求
var Ajax = {
get: function (url, fn) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200 || xhr.status == 304) {
fn.call(this, xhr.responseText);
}
};
xhr.send();
},
post: function (url, data, fn) {
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 304)) {
fn.call(this, xhr.responseText);
}
};
xhr.send(data);
}
};
// 演示GET请求
Ajax.get("users.json", function (response) {
console.log(response);
});
// 演示POST请求
Ajax.post("users.json", "", function (response) {
console.log(response);
});
四、Cookie
1.概述
Cookie 是一些数据, 存储于你电脑上的文本文件中。
当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。
Cookie 的作用就是用于解决 "如何记录客户端的用户信息":
- 当用户访问 web 页面时,他的名字可以记录在 cookie 中。
- 在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录。
Cookie 以名/值对形式存储,如下所示:
username=John Doe
注:当浏览器从服务器上请求 web 页面时, 属于该页面的 cookie 会被添加到该请求中。服
务端通过这种方式来获取用户的信息。
JavaScript 可以使用 document.cookie 属性来创建 、读取、及删除 cookie
2.Cookie创建
创建 cookie :
document.cookie="username=John Doe";
为 cookie 添加一个过期时间(以 UTC 或 GMT 时间)
document.cookie = "username=zhangsan; expires=Thu, 18 Dec 2043 12:00:00 GMT";
默认情况下,cookie 在浏览器关闭时删除
您可以使用 path 参数告诉浏览器 cookie 的路径。
document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";
默认情况下,cookie 属于当前页面。
3.Cookie读取
在 JavaScript 中, 可以使用以下代码来读取 cookie:
var x = document.cookie;
4.Cookie修改
使用 document.cookie 将旧的 cookie 将被覆盖就是修改
document.cookie="username=John Smith; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";
5.Cookie删除
删除 cookie 非常简单。您只需要设置 expires 参数为以前的时间即可
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
6.Cookie值设置函数
/*
Cookie值设置函数
cname cookie名称
cvalue cookie值
exdays 过期天数
*/
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires;
}
7.Cookie值获取函数
/*
Cookie值获取函数
@param cname cookie名称
@returns {string}
*/
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
}
return "";
}
8.检测 cookie 值的函数
function checkCookie()
{
var username=getCookie("username");
if (username!="")
{
alert("Welcome again " + username);
}
else
{
username = prompt("Please enter your name:","");
if (username!="" && username!=null)
{
setCookie("username",username,365);
}
}
}
六、WebStorage
1.WebStorage概述
WebStorage是HTML5中本地存储的解决方案之一,浏览器兼容的本地存储方案只有使用Cookie至于为什么还要引入WebStorage,那就要说一说Cookie的缺陷了:
- 数据大小:作为存储容器,Cookie的大小限制在4KB左右这是非常坑爹的,尤其对于现在复杂的业务逻辑需求,4KB的容量除了存储一些配置字段还简单单值信息,对于绝大部分开发者来说真的不知指望什么了。
- 安全性问题:由于在HTTP请求中的Cookie是明文传递的(HTTPS不是),带来的安全性问题还是很大的。
- 网络负担:我们知道Cookie会被附加在每个HTTP请求中,在HttpRequest和HttpResponse的header中都是要被传输的,所以无形中增加了一些不必要的流量损失。
WebStorage不是为了取代Cookie而制定的标准,Cookie作为HTTP协议的一部分用来处理客户端和服务器通信是不可或缺的,session正是依赖于实现的客户端状态保持。WebStorage的意图在于解决本来不应该Cookie做,却不得不用Cookie的本地存储的应用场景。
WebStorage的目的是为了克服由cookie带来的一些限制,当数据需要被严格控制在客户端上时,无须持续地将数据发回服务器。Web Storage的两个主要目标是:
- 提供一种在cookie之外存储会话数据的途径。
- 提供一种存储大量可以跨会话存在的数据的机制。
2.WebStorage分类
- Web Storage又分为两种: sessionStorage 和localStorage ,即这两个是Storage的一个实例。
- sessionStorage将数据保存在session中,浏览器关闭也就没了;
- 而localStorage则一直将数据保存在客户端本地。
- 不管是sessionStorage,还是localStorage,使用的API都相同。
注:
- localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理,低版本IE可以使用JSON2.js
3.localStorage方法
localStorage在本地永久性存储数据,除非显式将其删除或清空。
常见方法:
- 保存单个数据:localStorage.setItem(key,value);
- 读取单个数据:localStorage.getItem(key);
- 删除单个数据:localStorage.removeItem(key);
- 删除所有数据:localStorage.clear();
- 获取某个索引的key:localStorage.key(index);
4.sessionStorage方法
- sessionStorage对象存储特定于某个对话的数据,也就是它的生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空了。
- 存储在sessionStorage中的数据可以跨越页面刷新而存在,同时如果浏览器支持,浏览器崩溃并重启之后依然可以使用(注意:Firefox和Weblit都支持,IE则不行)。
- 因为sessionStorage对象绑定于某个服务器会话,所以当文件在本地运行的时候是不可用的。
- 存储在sessionStorage中的数据只能由最初给对象存储数据的页面访问到,所以对多页面应用有限制。
注:
- 不同浏览器写入数据方法略有不同。
- Firefox和Webkit实现了同步写入,所以添加到存储空间中的数据是立刻被提交的。而IE的实现则是异步写入数据,所以在设置数据和将数据实际写入磁盘之间可能有一些延迟。
常见方法:
- 保存单个数据:sessionStorage.setItem(key,value);
- 读取单个数据:sessionStorage.getItem(key);
- 删除单个数据:sessionStorage.removeItem(key);
- 删除所有数据:sessionStorage.clear();
- 获取某个索引的key:sessionStorage.key(index);
七、Closure
1.闭包概述
JavaScript 变量属于本地或全局作用域。
全局变量能够通过闭包实现局部(私有)
- 如何产生闭包?
- 当一个嵌套的内部(子)函数引用了嵌套的外部(父)函数的变量(函数)时,就产生了闭包
- 什么才是闭包?
- 理解一:闭包是嵌套的内部函数(绝大部分人认为)
- 理解二:包含被引用变量(函数)的对象(极少部分人认为)
- 闭包的作用?
- 它的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中
2.闭包生命周期
生命周期:
- 产生:在嵌套内部函数定义执行完时就产生了(不是在调用)
- 死亡:在嵌套的内部函数成为垃圾对象时就死亡了
即:
全局变量活得和您的应用程序(窗口、网页)一样久。
局部变量活得不长。它们在函数调用时创建,在函数完成后被删除
3.闭包应用
闭包应用: 定义JS模块
- 具有特定功能的js文件
- 将所有的数据和功能都封装在一个函数内部(私有的)
- 只向外暴露一个包含n个方法的对象或函数
- 模块的使用者,只需要通过模块暴露的对象调用方法来实现对应的功能
本文由博主在学习过程中所写,如有错误和问题,望理解。