ECMAScript6 新的javascript标准
var let const
1、var
作用域范围是函数作用域或全局作用域的。
不受暂存死区(TDZ)的限制。
它会在 window 上以相同的名称创建一个全局属性。
是可重新分配的。
是可重新声明的。
var定义的变量可以修改,如果不初始化会输出undefined,不会报错。
// 单击li alert弹出下标
// 选择到所有的li标签
var lis = document.querySelectorAll("ul li")
// 遍历弹出下标
for (let j = 0; j < lis.length; j++) {
lis[j].onclick = function () {
alert(j)
}
// var 声明的变量 for循环在单击的时候已经执行完毕,执行完毕的j就是5
// let 声明局部作用域 (与for循环的局部作用域互不影响的)
// lis[j].onclick=function....代码在局部作用域中执行,就可以读取到当前局部作用域j
}
//并不确定函数的参数是几个(定义函数的时候)
//...变量名 接收所有的参数列表
function add(...args) {
var total = args.reduce((a, b) => a + b);
console.log(total);
}
add(2, 3);
add(1, 2, 5)
//可以给默认值
let arr2 = [1, 2, 3, 4];
let [d, e, f, g = 88] = arr2; //如果g为undefined,则g=88
console.log(d, e, f, g);
//可以交换变量
var k = 100;
var j = 50;
[k, j] = [j, k];
//forEach 遍历元素
var arr1 = [1, 2, 3, 4, 5, 6];
//item当前遍历的元素 index 当前元素的下标,self 当前遍历的数组
arr1.forEach(function (item, index, self) {
console.log(item, index, self);
})
//filter 过滤不符合条件的元素(返回true保留,返回false过滤)
var arr2 = arr.filter(function (item) {
return item % 2 == 0;
})
console.log("arr", arr2);
var total = arr.reduce(function (a, b) {
return a + b;
})
console.log(total);
var big = arr.reduce(function (a, b) {
return a * 10 + b;
})
console.log("big", big);
//some 有一个返回为真,整体为真
var arr6 = [5, 1, 2, 12, 3, 7];
//判断arr6里面是否有一个大于10的数
var isbig = arr6.some(function (item) {
return item > 10;
})
console.log("isbig", isbig);
//4、every 所有的回调函数返回为真,才为真
//查找所有的数是否都大于5
var bigF = arr6.every(function (item) {
return item > 5
})
console.log("bigF", bigF);
var arr = [2, 4, 6, 8,10];
find查找符合条件的元素
var el = arr.find(function (item) {
if (item > 5) {
return true
}
})
var el = arr.find(item => item > 5);
console.log(el);
var fun = function () {
alert("love");
}
fun();
var fun = () => alert("love");
fun1();
//=>左侧是参数
//右侧是执行语句也是返回值
var p=new promise((reslove,reject)=>{
})
.then(res=>{})
//回调函数获取resolved 返回的结果
//返回一个新的promise 实例
.catch(err=>{})
//获取rejected的原因
Document
// 实现异步 1、回调函数 2、事件响应 3、promise 承诺 4、订阅和发布模式
function say(str, delay, callback) {
setTimeout(() => {
console.log(str);
if (callback) { callback() }
}, delay)
}
say("ejkakra",2000,()=>{
say("你笑起来真好看",5000,()=>{
say("我可以加你的微信吗",3000)
})
})
//async 修饰的函数,函数执行返回的是一个promise对象
//通常配合await等待关键字,await只能出现在async在修饰的函数里面
//await会等待promise的reslove的结果
function say(msg, delay) {
return new Promise((reslove, reject) => {
setTimeout(() => reslove(msg), delay)
})
}
async function doit() {
var m1 = await say("你好,你俩可以去死吗", 4000);
console.log(m1);
var m2 = await say("吃鸡", 3000)
console.log(m2);
return "国庆佳节"
}
doit()
.then(res => console.log(res))
function *range(min,max){
for(var i=min,i
{value:1,done:false}
...
{value:undefined,done:true}
for(v of range (1,100)){
console.log()
}
Object.defineProperty(obj,props,{
set(v){//设置},
get(v){//获取}
configurable:true,是否能删除
enumerable:true,是否可以枚举
value 默认值
writable:true 是否可写
})
可以定义对象的某个属性
//async 修饰的函数,函数执行返回的是一个promise对象
//通常配合await等待关键字,await只能出现在async在修饰的函数里面
//await会等待promise的reslove的结果
function say(msg, delay) {
return new Promise((reslove, reject) => {
setTimeout(() => reslove(msg), delay)
})
}
async function doit() {
var m1 = await say("你好,你俩可以去死吗", 4000);
console.log(m1);
var m2 = await say("吃鸡", 3000)
console.log(m2);
return "国庆佳节"
}
doit()
.then(res => console.log(res))