前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端之ES6浅学习

前端之ES6浅学习

作者头像
松鼠先生
发布2022-02-22 15:00:18
2740
发布2022-02-22 15:00:18
举报

ES6我没有学完,毕竟JS我也才过了一遍基础,其实我也就跟着B站的Pink老师的视频学了一下CSS和JS,而且是跳跃式的学习,毕竟我不是前端,估计也不会以前端为职业。仅仅是为了兴趣,所以jQuery这等老爷爷级别的框架我就没学了,毕竟我不会维护老的项目。我学前端大概率就是从0-1搭建网站而已。

ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

说人话就是ES6是JS的增添版,目的是为了使得JS更健壮而出来的。为什么要学它呢?因为JS有些语法太反人类,可能是反我这种小白,而ES6里好多新特性都真香。

一、let/const VS var

JS一直都是使用var,var的弊端就是作用域问题。首先说说我觉得的重要的区别:

  1. var会有声明提前,let不会
  2. var是全局作用域,let是块级作用域

var的声明提升貌似称为变量提升,就是无论你在哪里定义的var a;都会把a的声明编译时放在最前面。这里要重点提示一下,var a = 1;前面var a是声明,= 1是赋值。变量提升,仅仅是提升了var a。并没有提升赋值。下面代码就是所谓的变量提升。

代码语言:javascript
复制
console.log(a); //此时显示a为undefined
var a = 1;
//变量提升即为
var a;
console.log(a); //打印为undefined
a = 1;
​
//let不提升和
console.log(b); //直接报错
let b = 1;

接下来讲一下var 的全局作用域和let的块级作用域的区别。直接上代码吧,通俗易懂。

代码语言:javascript
复制
if(true){
    var a = 1;
}
console.log(a); //打印1
//let作用域展示
if(true){
    let b = 1; //b的作用域仅仅是在if条件内
}
console.log(b); //报错,提示b没有定义。

看完代码可以看到,全局内只要使用var声明了a,a就存在,是全局作用域。而let声明的是块级作用域,这里主要解决了ES5里面if和for等没有块级作用域,引入let之后就可以解决这个问题,从而不需要依赖函数的作用域了。这里需要注意的是在函数内,如果是想声明并赋值一个变量,一定要有声明(即var)不然该变量会变成全局变量。

ES6里面const用于定义常量。需要注意一下几点:

  1. const修饰的标识符为常量,不可以再次赋值
  2. 在使用const定义标识符,必须进行赋值
  3. 常量的含义是指向的对象不能修改,但是可以改变对象内部的属性。比如const app = new Vue({})里面的数据是可以修改的

二、ES6对象字面量增强写法

这里依然复习一下在JS里如何创建对象,有三种方式:

那么对象字面量增强,我们也得先了解一下什么是对象字面量法,无代码无真相,如下。

代码语言:javascript
复制
const person = {
    name: 'll',
    age: 18,
    run: function(){
        console.log('running')
    },
    eat: function(){
        console.log('eating')
    }
}

这种是直接声明定义,假如我们需要添加性别属性怎么办?或者说我们声明对象的时候,还没想好是名字到底用哪个。还有字面量增强写法到底是什么呢?

代码语言:javascript
复制
//ES5写法
const name = 'll';
const age = 18;
​
const obj = {
    name: name,
    age: age
}
​
//ES6写法
const name = 'll';
const age = 18;
​
const obj = {
    name,
    age,
    run(){
        console.log('runnning');
    }
}

其实字面量增强说起来超级简单,就是以前在{}里面定义属性需要key: value型,现在在外面定了常量,直接使用key就好了。说到底,字面量增强只是简化了对象声明时的写法。不管用哪种,只要自己顺手都行。

三、ES6模块导入和导出

导入和导出使用的是import和export,接下来看看代码,感觉跟python很像。

导出:

代码语言:javascript
复制
//导出变量/常量
export var age = 18;
export var name = 'll';
export const sex = male;
​
//导出类
export class Person {
    constructor(name, age){
        this.name = name;
        this.age = age;
    }
}
​
//导出函数
export function add(num1, num2){
    return num1 + num2;
}
导入:导入可以全部一起导入,也可以导入某几个,也可以指导入一个

//全部导入
import * as example from './example.js';
​
//导入几个
import {add, Person, age} from './example.js'
​
//导入一个
import {add} from './example.js'

此外还有默认导出:

代码语言:javascript
复制
function add(num1, num2){
    reutrn num1 + num2;
}
​
export default add;

导入默认导出的方式跟普通导出是一样的。

四、ES6箭头函数

箭头函数是什么?直接上代码吧

代码语言:javascript
复制
//箭头函数
let ccc = () => {}
​
//两个参数的箭头函数
const sum = (num1, num2) => {
    return num1 + num2;
}
//一个参数时的箭头函数,可以省略()
const power = num => {
    return num * num;
}
​
//只有一行代码的箭头函数,可以省略return自动返回
const mul = (num1, num2) => num1 * num2;
​
//只有一行代码,只有一个参数的箭头函数
const power = num => num * num;

够简单的吧?必然小括号里面就是形参,{}里的就是函数内部代码,ccc是函数名。上面代码接下来展示了两个参数时的形式,这也是标准形式。但是ES6处处替程序猿着想,该简写的一定能让你简写,简直太贴心了。但凡有一就可简写,只有一个参数时,可以省略括号,只有一行代码时,可以省略return。那么只有一个参数,一行代码,必然就是最后一个啦。要不是有个=>简直简略到认不出来了。

五、ES6的高阶函数

5.1 filter()

主要作用:过滤,返回一个数组

形参为回调函数,该函数的参数为要过滤数组的每一个元素,该回调函数必须返回boolean值,返回true时,将该元素加入新的数组中,返回false时,回调函数内部会过滤掉这次的元素

代码语言:javascript
复制
let nums = [1,2,3,4,5,6,7,8];
let newNew = nums.filter(function(item){
    return item < 4;
})
//newNew为[1,2,3];
使用箭头函数简写回调函数
let newNew = nums.filter(item => item < 4)

5. 2 map()

主要作用:将原来数组做一些操作输出新的数组

代码语言:javascript
复制
let nums = [1,2,3,4,5,6,7,8];
let numNew = nums.map(item => item * 10);
console.log(numNew);

5.3 reduce()

主要作用:对数组里的元素进行汇总

输入:两个参数,第一个参数是一个回调函数,该回调函数有两个参数,回调函数的第一个参数为输入数组的当前元素的上一个元素,回调函数的第二个参数为输入数组的当前元素。reduce的第二个参数为初始值。下面代码实现累加:

代码语言:javascript
复制
let nums = [20, 40, 60, 80];
//reduce实现累加
let total = nums.reduce((prev, cur) => prev + cur, 0);
console.log(total);
​
//reduce实现累乘
let sum = nums.reduce((prev, cur) => prev * cur, 1);
console.log(sum);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、let/const VS var
  • 二、ES6对象字面量增强写法
  • 三、ES6模块导入和导出
  • 四、ES6箭头函数
  • 五、ES6的高阶函数
    • 5.1 filter()
      • 5. 2 map()
        • 5.3 reduce()
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档