JavaScript JSON
json是用于存储和传输数据的格式
json通常用于服务端向网页传递数据
json.parse()
将json字符串转换为js对象
json.stringify()
将js值转换为json字符串
{"sites":[
{"name":"Runoob", "url":"www.runoob.com"},
{"name":"Google", "url":"www.google.com"},
{"name":"Taobao", "url":"www.taobao.com"}
]}
JSON 是 JS 对象的字符串表示法。它使用文本表示一个 JS 对象的信息,(JSON)本质是一个字符串。
javascript:void(0) 含义
void
指定要计算一个表达式而不是返回值
如果你要定义一个死链接请使用 javascript:void(0) :
<a href="javascript:void(0)">单击此处什么也不会发生</a>
JavaScript 异步编程
同步按你的代码顺序执行,异步不按照代码顺序执行,异步的执行效率更高
js中的异步操作函数往往通过回调函数来实现异步任务的结果处理。
回调函数
回调函数就是一个函数,它是在我们启动一个异步任务的时候就告诉它:等你完成这个任务之后要干什么。这样一来主线程几乎不用关心异步任务的状态了,它会自己善始善终。
JavaScript Promise
promise的目的是更加优雅地书写复杂的异步任务。
构造promise:
new Promise(function(resolve, reject){
//要做的事情
});
resolve和reject都是函数,调用resolve代表一切正常,reject是出现异常时调用的。
Promise类有.then()
.catch()
和.finally()
三个方法,其参数都是一个函数。
.then()
可以将参数中的函数添加到当前Promise的正常执行序列,.catch()
则是设定Promise的异常处理序列,.finally()
是在Promise执行的最后一定会执行的序列。
.then()
传入的函数会按顺序依次执行,有任何异常都会直接跳到catch序列。
resolve()
中可以放置一个参数用于向下一个then
传递一个值。
reject()
参数中一般会传递一个异常给之后的 catch
函数用于处理异常。
实例:
new Promise(function(resolve, reject){
setTimeout(function(){
console.log("First");
resolve();
}, 1000);
}).then(function(){
}
Promise函数
function print(delay, message){
return new Promise(function(resolve, reject){
setTimeout(function(){
console.log(message);
resolve();
}, delay);
});
}
这种返回值为一个Promise对象的函数称作Promise函数,常常用于开发基于异步操作的库。
print(100, "first").then(function(){
return print(4000, "second");
}).then(function(){
print(3000, "Third");
})
还可以变为
async function asyncFunc(){
await print(1000, "First");
await print(4000, "second");
await print(3000, "Third");
}
asyncFunc();
Promise 对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称 Fulfilled)和 Rejected(已失败)。
通过回调里的 resolve(data) 将这个 promise 标记为 resolverd,然后进行下一步 then((data)=>{//do something}),resolve 里的参数就是你要传入 then 的数据。
JavaScript 函数定义
可以通过声明定义,也可以是一个表达式。
- 声明通过
function
关键字
function functionName(parameters){
//
} //不以分号结尾,因为声明后不会立即执行
- 函数表达式
函数表达式可以存储在变量中。
此时的函数实际上只是一个匿名函数(没有名称),函数存储在变量中,不需要函数名称,通常通过变量名来调用。
var x = function(a, b){return a * b}; //以分号结尾,因为是一个执行语句
var z = x(4, 2)
Function()构造函数
可通过内置的js函数构造器(Function())定义。
var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
函数提升(hoisting)
函数是对象
js函数有属性和方法
argument.length
属性返回函数调用过程中接受到的参数个数。
箭头函数
ES6增加了箭头函数
(参数1,参数2,...) => {函数声明}
(参数1,参数2,...) => 表达式(单一)
当只有一个参数时,圆括号可选
(单一参数) => {函数声明}
单一参数 => {函数声明}
没有参数的函数写出一对圆括号
() => {函数声明}
函数表达式使用const比使用var更安全,因为函数表达式始终是一个常量。
若函数部分只是一个语句,则可以省略return和{},is a good habit
arguments对象
JavaScript 函数有个内置的对象 arguments
对象。
argument
对象包含了函数调用的参数数组。
JavaScript 函数调用
有4种调用方式
区别在于this的初始化
- 作为一个函数调用
- 全局对象
- 函数作为方法调用
- 使用构造函数调用函数
- 作为方法调用函数
JavaScript 闭包
var add = (function(){
var counter = 0;
return function(){return counter += 1;}
})();
add变量可以作为一个函数使用。它可以访问函数上一层作用域的计数器。这叫做js闭包。它使得函数拥有私有变量变为可能。