ES6语法笔记

本文介绍了ES6中的关键语法特性,包括var、let和const的差异,如变量提升、作用域和重新赋值。此外,详细讲解了箭头函数的this指向、new限制以及解构赋值和拓展运算符的应用。还涉及到Promise的基础知识和Array的拓展方法如find、findIndex等。
摘要由CSDN通过智能技术生成

1、var、let、const有啥区别?

1.1、var 有变量提升机制,let和const 没有**

console.log(a)//undefined
console.log(b)// 报错
console.log(c)// 报错
var a = 1
let b = 1
const c = 1

1.2、var 可重复声明同一个变量,let 和const 不行**


var a = 1
var a 
// let b //直接报错
// let b 
// const c //直接报错
// const c 
console.log(a)//1

1.3、var 和let 可以赋值同一个变量,const不行,因为const是针对常量的,但假如const 声明对象为对象类型,那可以对对象里的属性进行重新赋值**

var a = 1
var a = 2

let b = 2 
 b  = 3

// const c = 2 
// c  = 5 // 直接报错
// console.log(c)// 报错

const d = {
  a:1
}
d.a = 3

console.log(a)//2
console.log(b)// 3
console.log(d)// {a:3}

1.4、var 是函数作用域,let和const 是块级作用域**

function  sty(){
  if(true){
    var a =  1
  }
  console.log(a)//1
}
sty()
console.log(a)// 报错

function  sty1(){
  if(true){
    let  a =  1 
    const b = 2
    console.log(a)//1
    console.log(b)//2
  }
  console.log(a)// 报错
  console.log(b)// 报错
}
sty1()

2、解构赋值及拓展运算符(展开语法)

2.1、解构

2.1.1、数组解构

let [a,b,c] = [1,2,3]
console.log(a,b,c);//1 2 3

2.1.2、对象解构

let {name,age} = {name:"小王",age:12}
console.log(name,age);//小王 12

let {name:myname,age:myage} = {name:"小王2",age:123}
console.log(myname,myage);//小王2 123

2.2、拓展运算符(展开语法)

let person = {name: "Amy", age: 15}
let someone = { ...person }
person.name = 'xiao'
console.log(someone,person ); // { name: 'Amy', age: 15 } { name: 'xiao', age: 15 }

let age = {age: 15}
let name = {name: "Amy"}
let person1 = {...age, ...name}
console.log(person1 ); // {age: 15, name: "Amy"}

3、箭头函数

箭头函数和普通函数有什么区别

3.1、this的指向问题

1、箭头函数的this在箭头函数定义时就决定的,箭头函数的this指向定义时外层第一个普通函数的this

let a = {
  b:function (){
    console.log(this) // 指向a这个对象
  },
  c:()=>{
    console.log(this) // 指向window 全局对象
  }
}

a.b()
a.c()

2、箭头函数不可修改指向(call,apply,bind),

let a = {
  b:function (){
    console.log(this) // 指向b这个对象
  },
  c:()=>{
    console.log(this)
  }
}

let b={
  b:'xxxxxx'
}

a.b().call(b)
a.c().call(b) //报错

3.2:箭头函数不能new(不能作为构造函数使用)

let a = ()=>{
  console.log(this) 
}
let b = new a() // 报错

3.3:箭头函数没有prototype

let a = ()=>{
  return 111
}
console.log(a.prototype);//undefined

3.4:箭头函数没有arguments

let a = ()=>{
  console.log(arguments);

}
a() // 报错

5、promise(之后需要补充相关问题)

5.1、有几种状态

1、pending(进行中)
2、fulfilled(已成功)
3、rejected(已失败)

6、Array的拓展方法

6.1、构造函数方法:Array.from()

将类数组或可遍历对象转换为真正的数组。

let obj = {
  0:1,
  1:2,
  2:3,
  length:3
}
let arr = Array.from(obj)
console.log(arr,obj);//[ 1, 2, 3 ] { '0': 1, '1': 2, '2': 3, length: 3 }

6.2、实例方法:find(),findIndex(),includes()

let obj = [1,4,4,26,8]
let arr = obj.find(a=>a>3)// 返回第一个符合要求的元素
console.log(arr);//4

let arr = obj.findIndex(a=>a>3)//返回第一个符合要求的下标
console.log(arr);//1

let arr = obj.includes(4)// 判断元素是否存在数组中,是返回true,否返回false
console.log(arr);//true

6.3、find和filter的区别

find 返回匹配的第一个值
filter 返回匹配的所有值的集合

let arr = [1,3,4,5,73,6,32,2,4]
let obj1 = arr.find((res)=> res > 4)
console.log(obj1); // 5
let obj2 = arr.filter((res)=> res > 4)
console.log(obj2); // [ 5, 73, 6, 32 ]

6.4、some和every的区别

some和every 返回值都是true,false其中一个,判断方法不一样
some是有一个匹配就返回true,而every是要调用对象所有值都匹配才返回true

let arr = [1,3,4,5,73,6,32,2,4]
let obj1 = arr.some((res)=> res > 4)
console.log(obj1); // true
let obj2 = arr.every((res)=> res > 4)
console.log(obj2); // false

# 8、String的拓展方法:模板字符串
模板字符串可以解析变量,换行,调用函数
```bash
let obj = {
  name:'小明',
  age:22
}
console.log(`${obj.name}
今年${obj.age}`);
// 小明
// 今年22岁

function fn(params) {
  return '好玩吧' 
}
console.log(`${fn()}`);// 好玩吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值