ES5及ES6

本文介绍了ES5和ES6的主要特性,包括ES5的严格模式、数组加强、高阶函数、bind、apply和call方法。在ES6中,重点讲解了命名修饰符let和const、String和Array的新方法、循环增强、function的默认参数、箭头函数以及解构赋值等概念。
摘要由CSDN通过智能技术生成

ES5及ES6

ES (ESMA SCRIPT)常见的版本 ES3 (最基础的版本 所有的浏览器都能解析) ES5 (部分低版本浏览器不能解析) ES6 (大部分的不能直接解析)ES7…

ES5

es5的增强内容(2009年 12月)
严格模式 (是es5新增的一个模式)

1.变量命名必须要有修饰符

2.函数内部this不能指向window

3.函数内容的arguments形参不同步

4.禁止在非函数代码块内 声明函数

5.禁止八进制

数组加强

indexOf 根据对应的内容找下标 从前到后 找不到返回-1

lastIndexOf 根据对应的内容找下标 从后往前 找不到返回-1

高阶函数

forEach 遍历的(遍历每个结果做相关操作)

map 遍历的 return (遍历每个结果做相关操作 返回一个新的数组)

some 有一些内容 返回boolean

every 所有都是 返回boolean

reduce reduceRigth 计算 (遍历每个值 做相关计算 返回结果)

filter 过滤 (遍历每个结果找到返回条件的结果返回数组)

bind 绑定this指向
<script>
    var obj = {
        name:'jack'
    }
    //属于window
    var name = "tom"
    function sayHello(){
        //this指向window
        console.log(this.name);
    }
    sayHello() //打印tom
    //bind方法 属于object的方法
    //把sayHello 绑定给obj  sayHello里面的this 指向对应的obj
    var bindFuntion =  sayHello.bind(obj) 
    //bind的返回值也是一个对象
    bindFuntion()//打印jack
</script>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0AaUeSIk-1655780146790)(C:\Users\29769\AppData\Roaming\Typora\typora-user-images\image-20220613145402800.png)]

apply方法
call方法
var obj = {
    name:'jack'
}
//属于window
var name = "tom"
function sayHello(){
    //this指向window
    console.log(this.name);
}
sayHello() //打印tom
//绑定this指向 自动执行方法 第一个参数指定的this指向 第二个参数为函数需要的参数 他传递的参数为数组
sayHello.apply(obj,null)
// 第一个参数指定的this指向 第二个参数为函数需要的参数 传递的参数为一个个的元素
sayHello.call(obj,null)

ES6

es6诞生于2015年6月 (对于函数对象和string 数组做了全套加强)

<script type=‘module’> es6的代码 </script>
命名修饰符
let 块状作用域
let b = 11 //声明的是一个块状作用域 let关键词在对应的区间不能重复声明
// let b = 12
for(let i=0;i<10;i++){

}
for(let i=0;i<10;i++){

}
const 常量 (块状作用域)定义建议全大写
// const 修饰为常量 常量是不可变的 不允许二次赋值 定义的时候必须要赋值 声明的也是一个块状作用域
const HI = 10
HI = 20 //错误的
String新增的方法

includes 是否包含

startsWith 是否为开头

endsWith 是否为结束

repeat 平铺产生新的字符串

//string 新增的内容
var str = "abc"
//是否包含 返回boolean类型的值
console.log(str.includes("a"));
// 是否是开始 以及是否是结束
// 里面的字符   开始位置(默认为第一个下标为0)
console.log(str.startsWith("a",1));
// 里面的字符   结束的位置 (默认为0 就是最后一个)
console.log(str.endsWith('c'));
//平铺 repeat 传入的参数为平铺的次数返回的是一个新的字符串
console.log(str.repeat(3));
Array新增

Array.from() 将伪数组转为数组

Array.of() 将一系列的值转为数组

Array.find() 查找元素 返回对应匹配的第一个元素

Array.findIndex() 查找下标 返回对应第一个匹配的下标

//将伪数组转为数组
// nodeList htmlCollection arguments
var liList =  document.querySelectorAll("li") //返回是一个伪数组
//使用Array.from 转为数组
var array = Array.from(liList) //from方法返回一个新的数组
array.forEach(function(v){
    console.log(v);
})
//Array.of 将对应一组数据转为数组
var numbers =  Array.of(1,2,3,4)
console.log(numbers);
//高阶函数 以函数做为参数的函数叫做高阶函数
var arr = ['a','b','c','d']
//find 查找 返回的是一个元素 只会找到匹配的第一个
var str = arr.find(function(v,index,array){
    //  if(v=='a'){
    //     return v
    //  }
    return v>'a' //返回一个boolean表达式
})
console.log(str);
//findIndex 查询下标 返回的是一个元素 只会找到匹配的第一个
var index = arr.findIndex(function(v,index,array){
    // if(v=='a'){
    //     return index
    // }
    return v=='a'
})
console.log(index);
循环的增强

for in 循环 (对象)

for of 循环 (数组)

// for in 遍历对象
// for of 遍历数组
var obj = {
    name:"jack",
    age:18
}
var arr =  [1,2,3,4]
//原始遍历 for(var i=0;i<10;i++)
// for in
for(var item in obj){ //对于对象遍历获取是key
    console.log(item);//获取的key
    console.log(obj[item]); //获取的value
}
for(var item in arr){ //对于数组遍历拿到是下标 (存在一定性的问题 不建议使用)
    console.log(item,arr[item]);
}
//for of 遍历数组的
for(var item of arr){ //遍历的是值
    console.log(item);
}
//对于没有迭代器的对象是不能使用for of来遍历 迭代器(用于迭代的对象)
//属于对象的方法 Object
// entries() 获取每个元素 包含键和值  keys() 获取所有的键  values() 获取所有的值
for(var item of Object.keys(obj)){ //迭代对象
    console.log(item);
}
for(var item of Object.values(obj)){ //迭代对象
    console.log(item);
}
for(var item of Object.entries(obj)){ //迭代对象  entries 返回一个二维数组
    console.log(item);
}
Object的方法

keys 获取对象的所有的key

values 获取对象的所有的值

entries 获取对象所有的键值对象(数组)

function 加强
对应默认参数 (支持没传值的时候 有一个默认值)
//后续在封装函数的时候 一定要用到的
function sayHi(name='hello',age=18){
    console.log(name)
    console.log(age)
}
//如果你没有传值他会有个默认值
sayHi()
//如果你传值的他就会将默认值替换
sayHi('jack') //jack 18
sayHi('jack',20) //jack 18
箭头函数 (匿名函数)
<button>按我</button>
<script>
    //后续在封装函数的时候 一定要用到的
    function sayHi(name='hello',age=18){
        console.log(name)
        console.log(age)
    }
    //如果你没有传值他会有个默认值
    sayHi()
    //如果你传值的他就会将默认值替换
    sayHi('jack') //jack 18
    sayHi('jack',20) //jack 18
    //匿名函数
    var sayHello = function(){
        console.log("hello");
    }
    //调用匿名函数对象
    sayHello()
    //es6诞生了一个箭头函数 简化我们对于匿名函数的声明
    var sayHello = ()=>{
        console.log("hi");
    }
    sayHello()
    //name是形参 一个形参的情况下可以省略对于的() 
    //当你的函数体只有一句代码 {} 也可以被省略
    var sayHello = name => console.log(name);
    sayHello('jack')
    //当你需要return数据的时候 你当前的代码只有一句的情况下 return也可以被省略
    var sayHello = name =>name //返回了对应的name
    console.log(sayHello('jack'));
    //箭头函数没有this 没有arguments数组 找他的父元素里面的this
    var obj = {
        name:'jack',
        // this 这个外面的this和对应的箭头函数里面的this是同一指向
        say:()=>{console.log(this);},
        test:()=>{
            console.log(this);//obj
            setTimeout(()=>{ //属于window
                console.log(this);
            })
        }
    }
    obj.test()
    //this指向对应的按钮
    document.querySelector("button").onclick =()=>{
        console.log(this);
    }
</script>
箭头函数的特性

当前只有一个参数 可以省略()

当前只有一行代码 可以省略 {}

当前如果只有一行代码 需要返回值 可以省略 ()

箭头函数里面没有this

箭头函数没有arguments

总结:箭头函数里面的this指向父元素的this
扩展运算符 *

打开对应的数组 …

…[a,b,c] ===> a b c

解构(对象)

打开对应的对象(解除构造)提取到里面的值

//对象里面存在n个键值对象
var obj = {
    name:'jack',
    age:18
}
//n个obj.key
console.log(obj.name);
console.log(obj.age);
//es6新增了对应的解构 减少对应的obj.
var {name,age,sex} = obj //称为解构
//得到对应的name 去比对obj里面是否存在相同的一个属性名叫name 如果没有返回undefined 有就返回这个对应的值
console.log(name); //jack
console.log(age); //18
console.log(sex); //undefined
var {message} = {
    message:"hello",
    message1:"world",
}
console.log(message); //hello

g(obj.name);
console.log(obj.age);
//es6新增了对应的解构 减少对应的obj.
var {name,age,sex} = obj //称为解构
//得到对应的name 去比对obj里面是否存在相同的一个属性名叫name 如果没有返回undefined 有就返回这个对应的值
console.log(name); //jack
console.log(age); //18
console.log(sex); //undefined
var {message} = {
message:“hello”,
message1:“world”,
}
console.log(message); //hello


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值