ES6小白攻略

1、var和let、const的使用

这三个是用来声明变量的(var let const)。

说到变量,就要说变量的作用域了,在js中作用域可以分为三种:全局作用域、局部作用域、块级作用域。

var来声明变量

我们用var的时候var是可以省略的,

var a = 10; a = 10;

这样写都是可以的,说一下加var和不加var的区别:

1.加var的可以做局部变量,也可以做全局变量,不加var的只能做全局变量。

2.加var的不可以被删除,不加var的可以被删除。

3.加var的可以被提升,不加var的不能够提升。

全局作用域和局部作用域怎么区分呢?
var a = 10;
function f(){
    var b = 1;
}
复制代码

那么变量a就是全局的,b就是局部的,其分界点说白了就是函数。

let来声明变量

let a = 10;

用let来声明和var是一样的,只是let形成了块级作用域,通常会用{}包起来,如下:

{
    let a = 10;
}
复制代码

注意:使用let来声明变量是不能提升的

经典应用在for循环:

for(let i=0;i<10;i++){
    //...
}
复制代码

const来声明变量

const声明一个只读的常量。一旦声明,常量的值就不能改变

const PI = 10;

如上,常量的值10就不能改变了。

const的作用域与let命令相同,只在声明所在的块级作用域内有效,同样也不可以提升。

2、数组的解构赋值

从数组和对象中提取值,对变量进行赋值,这被称为解构。

var arr = [1,2,3];
let a = arr[0];
let b = arr[1];
let c = arr[2];
复制代码

把数组arr中的值赋给a、b、c。

使用解构赋值就可以这样写了

let [a,b,c] = [1,2,3]

有这样几个细节需要注意一下

1.左右结构不一样

let [a,b,b] = [1,2,3,4];

只有三个变量a b c ,那么就取值到第三位,就是 [1,2,3]

let [a,b,c,d] = [1,2,3];

有四个变量,却只有三个值,最后一个变量赋值不到,就输出undefined了

2.跳过部分

let [a,,c] = [1,2,3];

中间无变量,但有位置。那么变量空着,我们赋值也给它空着。

3.默认值

let [a,b,c,d=10] = [1,2,3];

只有三个值,则赋给了前面的三个变量,最后的变量d已经赋值10了.

那么输出结果就是a 1,b 2,c 3,d 10.

4.嵌套

let [a,b,c] = [1,2,[3]];

结果就是a 为 1,b 为 2, c 为 [3]。

3、箭头函数

开始写函数我们都是这样写的

let arr = function(x,y){
    return x+y
}
console.log(arr(1,2)

function f(x,y){
    return x+y
}
console.log(f(1,2)
复制代码

箭头函数形式如下:

var arr = (x,y) =>{
    return x+y
}
console.log(arr(1,2)
复制代码

箭头函数使得表达更加简洁,从而简化了我们的代码。

还可以简化为

var arr = (x,y) => x+y
console.log(arr(1,2)
复制代码

如果只有一个参数,还可以继续简化

var arr = x => 3
console.log(arr())
复制代码

没有参数呢

var arr = ()=> 3
console.log(arr())
复制代码

补充一点:如果返回的是一个对象,对象的外面就必须要加上括号(一个对象也要加)。

var arr = () => ({a:"css",b:"html"});
console.log(arr())
复制代码

4、this

只要能写js代码的地方,都可以访问this。

1.如果是一个普通的函数,this就指向了window.

function f(){
    console.log(this)
}
复制代码

2.如果this出现在一个方法中,那么this就表示这个方法所在的对象

var arr = {
    show:function(){
        console.log(this)
    }
}
arr.show();
复制代码

此时this就指向了show。

  1. 如果在调用函数之前加上一个new, 它会创建并返回一个对象,而这个函数内部的this就指向个对象
function f(){
    console.log(this)

}
console.log(new f())
复制代码
  1. 可以通过Function对象的apply和call就去来指定函数内部中的this指向

call的使用如下。

var arr = {name:"jiang"}
function f(x){
    console.log(x)
    console.log(this)
}
f.call(arr,10)
复制代码

apply的使用如下。

var arr = {name:"jiang"}
function f(x){
    console.log(x)
    console.log(this)
}
f.apply(arr,[10])
复制代码

tips:call和apply的区别?

  1. 如果后面没有参数,则两个的用法完全一样。

  2. call的使用

    函数名.call(变量,参数)

  3. apply的使用

    函数名。apply(变量,[参数])

5、数组

数组有很多的,不仅仅是ES6,这里我们就一起说了吧。

1.基本数组

1.join

作用:把数组变成一串字符串,同时这些字符串中的字符由方法接受的参数决定;

var arr = [1,2,3];
var a = arr.join("");
console.log(a)
复制代码

这样输出的结果就是 123 了。

2.reverse

作用:把数组中的元素颠倒排列

var arr = [3,5,7];
var rs = arr.reverse();
console.log(rs)
复制代码

3.concat

作用:把两个数组合成一个数组

var arr1 = [1,2,3];
var arr2 = [4,5,6];
var rs = arr1.concat(arr2);
console.log(rs)
复制代码

4.sort

作用:排序 根据ASCII码进行排序

var arr = [3,6,1,9,7];
var rs = arr.sort(rs);
console.log(rs)
复制代码

5.slice

作用:索引

var arr = [3,6,8,2,5,0];
var rs = arr.slice(2,4);   
console.log(rs)
复制代码

tips:不包括最后面的索引

6.push

作用:在数组最后面推一个元素

var arr = [2,3,4,5];
var rs = arr.push(10);
var rs1  = arr.join("");
console.log(rs)
复制代码

tips:返回的是元素的个数

7.unshift

作用:在数组最前面面推一个元素

var arr = [2,3,4,5];
var rs = arr.unshift(9);
console.log(rs)

复制代码

tips:返回的是元素的个数

8.pop

作用:在数组的最后面删除一个元素

var arr = [2,3,4];
var rs = arr.pop();
console.log(rs);
复制代码

tips:返回的是被删除的元素

9.shift

作用:在数组的最前面删除一个元素

var arr = [2,3,4];
var rs = arr.shift();
console.log(rs);
复制代码

tips:返回的是被删除的元素

2.ES5中扩展的数组

1.Array.isArray()

作用:判断一个数组是不是真数组

let arr = [1,2,3];
console.log(Array.isArray(arr))
复制代码

2.forEach()

作用:遍历数组

let arr = [1,2,3];
arr.forEach(function(item,index,arr){
    console.log(index)   
})
复制代码

tips:有三个参数

item:当前数组中的元素

index:元素的索引

arr:当前数组

3.map()

作用:逐一处理原数组元素 返回一个新数组

let arr = [1,2,3];
let rs = arr.map((item,index,arr)=>{
    return item += 10
})
console.log(rs)
复制代码

4.filter()

作用:过滤 逐一过滤,留下符合条件的新数组

let arr = [1,2,3,4,5,6,7,8];

let rs = arr.filter((item,index,arr)=>{
    return item<5;
})
console.log(rs)
复制代码

5.reduce()

作用:不断地将前一项和后一项的值进行运算

let arr = [1,2,3,4,5,6];
let rs = arr.reduce((prev,next)=>{
    return prev + next
})
console.log(rs)
复制代码

6.some()

作用:只要数组中的某一个元素符合指定的条件,就会返回真,否则返回假。

7.every()

作用:如果数组中的所有元素都符合指定的条件,才返回真,否则返回假。

3.ES6扩展的数组

1.Array.form()

作用:将假数组转化为真数组

2.Array.of()

作用:将一组值转化为数组

3.find

作用:用于找出第一个符合条件的数组元素

4.findindex

作用:用于找出第一个符合条件的数组元素索引

5.includes()

作用:判断元素是否在数组中存在。返回值是 true|false

6.fill()

作用:给数组填充指定值。

数组的扩展运算符(...)

var arr = [1,2,3];
var res = [...arr];
console.log(res)
复制代码

6、Set、map数据结构

Set

类似于数组,只是里面的值都是唯一的,没有重复的。

创建Set

var arr = new Set();

经典案例:数组去重,如下。

添加或删除某值如下:

var arr = new Set();
arr.add(1)
arr.add(2)
arr.delete(1)
console.log(arr)
复制代码

Map

map类似于对象,里面也是存放键值对,区别在于:对象中的键名只能是字符串,如果使用map,它里面的键可以是任意值。

创建Map

var arr = new Map();

添加数据

var arr = new Map([
    ["a","html"],
    ["b","css"]
])
arr.delete("a") //删除数据
console.log(arr)
复制代码

7、字符串扩展

1.模板字符串

两个反单引号 ``包裹的字符窜就是字符串模板。在字符串模板中可以使用${}符号来引用变量。

var name = "jiang";
var age = 18;
console.log(`我是${name},我${age}岁了`)
复制代码

2.trim()

作用:除去字符串空格

var arr = "           a b c d e                      ";
console.log(arr.trim())

复制代码

3.repeat()

作用:复制字符串

var arr = "12345";
console.log(arr.repeat(10))
复制代码

这样就复制了10次arr了

4.includes()

作用:检测字符串中的元素

var arr = "a bc de";
console.log(arr.includes("a"))
复制代码

其返回值是布尔型。

5.startsWith

不能隔着空格输出

6.endswith

全部才为真,否则为假

7.padStart

在字符串前面加入,共10个字符

8.padEnd

在字符串后面加入,共10个字符

8、class

其实是一种语法堂,还是基于原型继承实现的

1.class创建对象

class AA{
    constructor(name){
        this.name = "jiang"
    }
}
复制代码

2.使用extends实现继承

class Father{
    constructor(name,age){
        this.name = name;
        this.age = age;
    }
    say(){
        console.log(`我是${this.name},我${this.age}岁了`)
    }
}
class Son extends Father{
    constructor(name,age,lesson){
        super(name,age)
        this.lesson = lesson
    }
    show(){
        console.log(`我是${this.name},我是${this.lesson}的学生`)
    }
}
var arr = new Son("jiang","18","华杉")
arr.say();
arr.show();
复制代码

这样就继承了父类的name、age.

constructor(name,age,lesson){
    
}
复制代码

3.类的静态方法 static

直接通过类名来访问的方法就是静态方法 , 静态方法只能用类名调用

class Father{
    constructor(name,age){
        this.name = name;
        this.age = age;
    }
    static say(){
        console.log("hello world")
    }
}
Father.say();
复制代码

9、补充-严格模式

使用严格模式的目的:规范代码,提高编译效率。

启动严格模式: "use strict"

在严格模式下不能使用没有var的变量

在严格模式下不能8进制的数字

在严格模式下不能把函数定义在if语句中

在严格模式下函数不能有重名的形参

在严格模式下不能arguments就不能使用了

在严格模式下不能function中的this就再在是window

转载于:https://juejin.im/post/5b6e8106f265da0f8c02e7d6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值