ES5或ES6

ES5或ES6 上

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

ES5
es5的增强内容

严格模式(es5新增的一个模式)

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

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

3.函数内部arguments与形参不同步

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

5.禁止八进制

6). eval函数作用域

7). delete 删除window的属性报错

1.声明变量使用关键字(var let const)
"use strict"
myname = "刘德华";//
cosole.log(myname)
2.禁止函数内的this指向全局对象window
"use strict"
function fn(){
    console.log(this) //underfined
}
fn()
3.arguments与形参不同步(不一致)
"use strict"
function fn(n){
	console.log(n) //100
	n = 200
	console.log(argumnets) //100 arguments与形参不同步(不一致)
	console.log(n)//200
}
fn(100)
4.禁止使用八进制(不要写0开头的数字)
"use strict";
 var a=099;
console.log(a);
//Uncaught SyntaxError: Decimals with leading zeros are not allowed in strict mode.
5.不允许在非函数的代码块内声明函数
"use strict"
if(true){
	function fn(){
	 alert(123)
	}
}
fn() //Uncaught ReferenceError: fn is not defined
6.eval函数作用域

eval()函数的作用 把字符串解析成js代码 == JSON.parse 可以利用它实现转JSON

var n = 10;
eval(' "use strict"; var n = 20; console.log(n);')//20
cosole.log(n) //10
7.delete 关键字报错
"use strict"
var a = 100
console.log(window.a)
delete window.a//Uncaught TypeError: Cannot delete property 'a' of #<Window>
console.log(window.a)//没有被删除,还会报错
使用"use strict" 他又分为全局严格和局部严格

这句话必须放在代码第一行

  • 全局严格
"use strict" //全局严格模式
function fn(){
	console.log(this) //undefined

}
fn()
function fn2(){
	console.log(this) //undefined

}
fn2()
  • 局部严格
function fn(){
    "use strict"//局部严格
    console.log(this) //undefined
}
fn()
function fn2(){
    console.log(this) //window
}
fn2()
数组加强

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

lastindexOf

高阶函数

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

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

some 有符合的内容返回Boolean

every 所有都符合 返回Boolean

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

​ 第一个参数是一个函数,函数内部有pre cur index arr 根据函数内部的return返回指定结果

​ 第二个参数是pre的初始值

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

  • bind是用于改变函数内部this的指向 不会立即执行
  • call 是用于改变函数内部this的指向 会立即执行当前参数 它有多个参数(推荐使用,具体效率高于apply)
  • apply 是用于改变函数内部this的指向 会立即执行当前参数 第二个参数是数组
bind绑定this指向
var obj = {
	name:'jack'
}
//属于window
var name = "tom"
function hi(){
    //this指向window
    console.log(this.name)
}
hi() //打印tom
//bind方法 属于object的方法
//把hi绑定给obj  hi里面的this指向对应的obj
var bindFn = hi(obj)
//bind 的返回值也是一个对象
hi()//打印jack

只改变函数内部的this指向 不会执行该函数

var person = {
    name: "刘德华"
}

function fn(a, b, c) {
    console.log(this)//函数内部的this指向window
    console.log(this.name)
    console.log(a, b, c)
}
fn.bind(person, "你好", "你们好", '大家好')() //不会自动执行 需要加小括号 
apply call方法
var obj = {
    name: 'jack'
}
var name = "tom"

function fn() {
    console.log(this.name)
}
fn()
//绑定this指向 自动执行方法 第一个参数指定的this指向 第二个参数为函数需要的参数 传递的参数为数组
fn.apply(obj,null)//可以添加第二个参数  fn.apply(obj,[name,age]) 在fn()要写相应的参数以及要打印
//第一个参数指定的this指向 第二个参数为函数需要的参数 传递的参数为一个个元素
fn.call(obj,null) //例如fn.call(obj,name,age)
function fn(a,b) {
    console.log(this);//window
    console.log(this.name);
    console.log(a,b);// 
}
fn.call(person,"你好call","2222")
fn.apply(person,["你好apply","2222"])
**setInterval 和setTimeout 默认情况下,内部函数的this指向window
  • 与this相关的场景有哪些(重点)
  1. 函数内部的this,默认是window
  2. 事件绑定函数,内部的this,默认是事件的绑定者
  3. 对象内部函数里头的this,指向当前的对象
  4. 定时器,延时器里的this,默认始终是window
  5. bind,call,apply会改变this指向
  6. 严格模式下,函数内部的this,指向undefined
  7. 箭头函数内部的this,指向上下文对象(环境变量)
  8. new会改变构造函数内部this的指向

ES6

es6 对于函数对象和string 数组做了加强

命名修饰符

1).let块级作用域

  • 相同的变量名称,只能被声明一次
let myname="刘德华";
let myname="周杰伦"; //相同的变量名称,只能被声明一次
// Uncaught SyntaxError: Identifier 'myname' has already been declared 
  • 如果在代码块内声明的变量,只能在代码块内使用
{
    let myname = "刘德华";
}
 console.log(myname);//Uncaught ReferenceError: myname is not defined
  • 防止变量的提升(预编译)
  function fn() {
      console.log(myname) //Cannot access 'myname' before initialization
      let myname = "蔡徐坤";
      console.log(myname);
 }
  fn();
  • 使用let解决下标问题
  var oBtns = document.querySelectorAll("button");// 5 
        for (let i = 0; i < oBtns.length; i++) {//用var打印全是5 用let会顺序打印
            oBtns[i].onclick = function () {
                console.log(i); //下标解决了
            }
   }

2).const 常量 (块状作用域) 定义建议写大小写

修饰常量,常量是不可变的,不允许二次赋值 定义的时候必须要赋值 生命的也是一个快状作用域
  1. 如果声明的变量的值是值类型,不可以被修改

  2. 如果生命的变量的值是引用类,可以修改值,不能修改类型

    值类型

    const COOLMAN = "老罗";
    COOLMAN = "谭杨帆" //常量 不可以修改
    console.log(COOLMAN)   //Uncaught TypeError: Assignment to constant variable.
    

    引用类型

    const COOLMAN = {
    	name:'换',
    	sex:'男',
    	age:'18'
    }
    COOLMAN.name = "胡安"
    console.log(COOLMAN) //胡安 类型没有被改变,对象的属性或者方法可以被修改
    

const 与let的相同点

可以避免变量的提升

也具备块级作用域

同一个变量只能声明一次

2.ES6-String新增方法

2.1 字符串的方法

includes(): 返回布尔值,表示是否找到了参数字符串

var str = "abc123"
console.log(str.indeOf("c") !=-1)//true
console.log(str.includes('c'))//true

startsWith(): 返回布尔值,表示参数字符串是否在源字符串的头部

var str = "abc123"
 console.log(str.startsWith("a"));//true

endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。

var str = "abc123";
console.log(str.endsWith("3"));

repeat(): 返回一个新字符串,表示将原字符串重复n次.

var str = "我爱你!";
console.log(str.repeat(100)); // 100次

2.2 字符串模板

       var chars="不"
       var str=`今天天气很${chars}好!`; 
       console.log(str);// 今天天气很不好!

3.ES6-Array新增

3.1 Array.from() 把伪数组转换为数组

第一个参数 伪数组

第二个参数 是一个回调函数,该回调函数内部写逻辑并且返回内容

var arg = {
    0:100,
    1:200,
    2:300,
    "a":99,
    length:3
}
var arr = Array.from(arg,function(item){
    console.log(item)
    return item*10
})
console.log(arr)  //[10000,20000,30000]

3.2 Array.of()把一组值转换成数组

   var arr = Array.of(1, 3, 5, 7, 9);

     console.log(arr);

3.3 find 根据条件,返回值

var oList = [
	{id:1,name:'一',age:20},
	{id:2,name:'ff',age:22},
	{id:3,name:'we',age:24},
	{id:4,name:'rg',age:26},
]
var strName = "f"
var person = oList.find(function(item){
    return item.name.includes(strName)
})
console.log(person) //会返回符合条件的值

3.4 findIndex 根据条件,返回值的下标

var oList = [
	{id:1,name:'一',age:20},
	{id:2,name:'ff',age:22},
	{id:3,name:'we',age:24},
	{id:4,name:'rg',age:26},
]
var strName = "f"
//var person = oList.findIndex(function(item){
//    return item.name.includes(strName)
//})
//console.log(person)  //1
 var index = oList.findIndex(function (item) {
            return item.name.includes(strName)
        })
        oList.splice(index, 1);
        console.log(oList); //删除

4. ES6-Function新增

4.1 函数的默认参数

function fn(name = 'qian'){
	document.write(`hello${name}`)  //注意括号
}

4.2 箭头函数(重点)

箭头函数,又叫做 拉姆达表达式 Lambda,是函数的语法糖,箭头函数一定是一个匿名函数

1.1计算2个数的和 普通函数
function cale(a,b){
	return a + b
}
var res=cale(10,20)
console.log(res)
1.1计算2个数的和 箭头函数

var calc = (a,b)=>{
	return a+b
}
var res=cale(10,20)
console.log(res)

2.1将一个数放大10被的普通函数
    	function show(n) {
            return n * 10
   		  }
2.2将一个数放大10被的箭头函数
     var show = n => n * 10;
3.1返回一个对象的普通函数
function set(name){
	var obj = {}
	obj.name = name
	return obj
}
3.2 返回一个对象的箭头函数
var set = name =>({name})
console.log(set("abc))
4.箭头函数常见写法
var arr = [1,2,3,4,5]
//升序
arr.sort((a,b)=>a-b)
arr.sort((a, b) => b - a);
// 每个数放大10被
arr.map(item => item * 10);

5.箭头函数的this指向(重点)

箭头函数内部的this,默认是根据函数所在的运行函数(上下文对象) , 在window下,this指向window

在定时器和延时器里,默认是window

在事件里,默认也是window

箭头函数的特性

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

'当前只有一行代码 可以省略()

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

箭头函数里面没有this

箭头函数没有arguments

总结:箭头函数里面的this指向父元素的this

注意:

  1. 箭头函数内部的this指向,不会被bind,call和apply改变
  2. 箭头函数,不能被new实例化
var Person = {
    name:'刘德华',
    showA:function (){
        //console.log(this) //Person 对象里的普通方法的this,指向当前对象
        var fn = ()=>{
            console.log(this) //Person 箭头函数的this,指向上下文对象(环境变量)
        }
        fn()
    },
    showB:()=>{
        //console.log(this) //window,对象里的箭头函数的this,默认是window
        var fn = ()=>{
            console.log(this);//window 箭头函数的this
        }
        fn()
    }
}
Person.showA()
Person.showB()
person.showB.bind(Person)()//箭头函数内部的this指向,不会被bind,call,apply改变
循环的增强

for in 循环(对象)

for of 循环(数组)

//for in 遍历对象
//for of 遍历数组
var obj = {
    name:"jack"
    age:"18"
}
var arr = [1,2,3,4]
//for in
for(var i in obj){//对于对象遍历获取的是key
    console.log(i) //获取key
    console.log(obj[i]) //获取的是value
}
for(var i in arr){ //对于数组遍历拿到是下标(存在一定的问题,不建议使用)
    console.log(i,arr[i])
}
//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 获取对象的所有的values

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

function 加强
对应默认参数 (支持没传值的时候 有一个默认值)
//后续在封装函数的时候  一定要用到
function sayHi(name = 'hello',age= '19'){
	console.log(name)
    console.log(age)
}
//如果你没有传值他也会有个默认值
sayHi() //hello 19
//如果你传值的就会将默认值替换
sayHi('jack') //jack 19
sayHi('jack',20) //jack 20
扩展运算符 *

打开对应的数组…

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

解构(对象)

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

//对象里面存在n个键值对象
var obj = {
    name:'jack',
    age:18
}
console.log(obj.name)
console.log(obj.age)
//es6新增了对应的解构 减少对应的obj
var {name,age,sex} = obj //称为解构
//得到对应的name 去对比obj里面是否存在相同1的一个属性名叫name 如果没有返回undefined 有就返回这个对应的值
console.log(obj.name) //jack
console.log(obj.age) // 18
console.log(obj,sex) //undefined
var {message} = {
    message:'hello'
    message:'world'
}
console.log(message)//hello
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值