前端基础知识库-ES6基础知识

简介: 随着前端的发展,JavaScript应用的领域也越来越广泛,其原本的语法的局限性也越来越明显,这便推动了ECMA制定ECMASCRIPT6(以下简称ES6)规范的推广,目前各大浏览器基本都支持了ES6的语法,下面就来了解下ES6的基本语法。

前言


随着前端的发展,JavaScript应用的领域也越来越广泛,其原本的语法的局限性也越来越明显,这便推动了ECMA制定ECMASCRIPT6(以下简称ES6)规范的推广,目前各大浏览器基本都支持了ES6的语法,下面就来了解下ES6的基本语法。

ECMASCRIPT 6简介


属性扩展

  • 解构赋值:es6中新增快捷的赋值赋值方式,常见用法如下:
//同时赋值多个变量
let [a,b,c] = [1,2,3]
console.log("a="+a+'/b='+b+'/c='+c)//a=1/b=2/c=3
//分解数组或对象,扩展运算符...
let arr = [1,2,3]
console.log(...arr)//1,2,3
let obj = {a:33,c:11,d:44}
let obj2 = {...obj,e:55}
console.log(obj2)//{a:33,c:11,d:44,e:55}
//参数的定义,同时定义多个
function f([x, y, z]) {}
f([1, 2, 3]);
function f2({x, y, z}) {}
f2({z: 3, y: 2, x: 1});
//方便提取对象的key
let jsonData = {status: "OK",data: [867, 5309]};
let {status, data} = jsonData;
console.log(status, data);

注意:在实际应用中解构不单用于数组、对象,只要内部具有iterator接口,就都可以使用解构。

  • 新增扩展:includes
/**
includes():返回布尔值,(字符串和数组都有)表示是否找到了参数字符串/数组的元素。
*/
let str = "testa"
str.includes("e")//true
str.includes("ee")//false
let arr = [1,2,3,'test']
arr.includes(1)//true
arr.includes("demo")//false
  • 新增扩展:模版字符串("`")("${}")
let name = "demo", time = "today";
`Hello ${name}, how are you ${time}?`

注:模版字符串的定义,方便传统模版的书写方式。

  • 新增扩展:for...of... / for...in
//for...of获取键值 for...in获取键名
var arr = ['a', 'b', 'c', 'd'];
for (let a in arr) {
  console.log(a); // 0 1 2 3
}
for (let a of arr) {
  console.log(a); // a b c d
}
//for...of只返回具有数字索引的属性 for...in返回key
let arr = [3, 5, 7];
arr.foo = 'hello';
for (let i in arr) {
  console.log(i); // "0", "1", "2", "foo"
}
for (let i of arr) {
  console.log(i); //  "3", "5", "7"
}

除了数组和对象外for...of也可以作用于字符串 类数组 Set 和 Map 结构 注:for...of是JavaScript仿照其他语言引入的特性,for...of作为遍历所有数据结构的统一的方法。

  • 新增扩展:Number.isNaN() Number.isFinite() Number.isInteger()
//Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity。
Number.isFinite(15); // true
Number.isFinite(0.8); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
//Number.isNaN()用来检查一个值是否为NaN。
Number.isNaN(NaN) // true
Number.isNaN(0) // false
Number.isNaN('0') // false
//Number.isInteger()用来判断一个数值是否为整数。
Number.isInteger(25) // true
Number.isInteger(25.1) // false

注:如果参数类型不是NaN,即不可以转换成number类型的,Number.isNaN一律返回false。

  • 新增扩展:catch 命令的参数省略
//catch(e)中的e参数在es6语法中可以省略,即可以写成如下:
try {
  // ...
} catch {
  // ...
}
  • 新增扩展: array新增方法from() of() find() findIndex()
//from()方法用于将两类对象转为真正的数组
let arraylike = {"0":'a',"1":'b'}
let arr2 = Array.from(arrayLike); // ['a', 'b']
//of()方法将一组值转换为数组
Array.of(1, 2, 3) // [1,2,3]
//find和findIndex为找到第一个符合回调函数中条件的元素和元素下标
[1,3,5,4,6,7].find(function(n){return n>5})//6
[1,3,5,4,6,7].findIndex(function(n){return n>5})//4
  • 新增扩展: object的assign() 和 keys() is()
//js中一切皆对象,object.is()可以比较两个值是否相等
let a = "test";let b = "test2"
Object.is(a, b)
//返回对象中的所有key值

新增属性

  • let:用于定义局部变量
{
    var a = 'test'
    let b = 'test22'
}
console.log(a)//test22
console.log(b)// ReferenceError: b is not defined.
  • const:js定义常量的关键字
const constA="test"
constA = "test2"
//TypeError: Assignment to constant variable.

注:如果const定义的常量是对象类型,那么改变对象属性的值不会报错

  • 顶层对象属性:window / global
//浏览器环境下使用window定义顶层对象
window.a = 'test'
//nodejs环境下使用global定义顶层对象
global.a="test"

注:ES2020 在语言标准的层面,引入globalThis作为顶层对象。也就是说,任何环境下,globalThis都是存在的,都可以从它拿到顶层对象,指向全局环境下的this。

  • proxy:在目标对象的外层搭建了一层拦截,外界对目标对象的某些操作,必须通过这层拦截
//创建proxy实例 target是需要拦截的对象,handler拦截时所进行的处理(一个对象,其属性是当执行一个操作时定义代理的行为的函数。)
let proxy = new Proxy(target, handler);
let handler = {
    get:function(target,name){},
    set:function(target,name){}
}
  • symbol 是一种基本数据类型,它的功能类似于一种标识唯一性的ID。
//唯一性 每次symbol都会创建一个新的symbol
Symbol("foo") === Symbol("foo"); // false
//应用场景1:使用Symbol来作为对象属性名(key)
//应用场景2:使用Symbol来替代常量
//应用场景3:使用Symbol定义类的私有属性/方法

注:不支持语法:"new Symbol()"。

新增语法

  • 类:声明创建一个基于原型继承的具有给定名称的新类。
class Foo{
    constructor(){
    }
}
//继承
class Far extends Foo {
  constructor() {
  }
}
  • 箭头函数:箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,arguments,super或new.target。
//基本语法
let foo = (params)=>{}
// 当只有一个参数时,圆括号是可选的:
let far =params=>{}

注:箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数。

  • 装饰器:decorator(装饰方法或属性)
//@+装饰器属性
@annotation
class MyClass { }
function annotation(target) {
   target.annotated = true;
}

注:浏览器不能识别装饰器语法,需要安装babel进行转换

//安装
npm install --save-dev @babel/core @babel/cli
npm install --save-dev @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties
//配置新建.babelrc文件
{
  "plugins": [
    ["@babel/plugin-proposal-decorators", { "legacy": true }],
    ["@babel/plugin-proposal-class-properties", {"loose": true}]
  ]
}
  • 模块化:es6引入了模块化的概念,即文件中的内容可以导出到另一个文件中。
//export命名导出
export { foo }; 
//export 默认导出
export default function() {} 
//import导入所有接口
import * as myModule from '/modules/my-module.js';
//import导入单个
import {foo} from '/modules/my-module.js';

异步处理

  • promise:是一个对象,它代表了一个异步操作的最终完成或者失败。他很好的解决了异步导致的回调地狱的问题。
new Promise((resolve, reject) => {
    console.log('初始化');
    resolve();
})
.then(() => {
    throw new Error('有哪里不对了');
    console.log('执行「这个」”');
})
.catch(() => {
    console.log('执行「那个」');
})
  • async/await:await后面接一个会return new promise的函数并执行它
//async返回的是一个promise对象
async function demoAsync() {
return "this is demo";
  }
const result = demoAsync();
console.log(result);
  • 注:await只能放在async函数里

总结


本节主要介绍了ES6的基本语法,主要参考了阮一峰的es6入门,另外本文的例子可以直接赋值到浏览器的控制台进行测试,下面的es6系列文章会对ECMASCRIPT6中的重难点进行分析。


相关文章
|
1月前
|
JavaScript 前端开发 Java
VUE学习四:前端模块化,ES6和ES5如何实现模块化
这篇文章介绍了前端模块化的概念,以及如何在ES6和ES5中实现模块化,包括ES6模块化的基本用法、默认导出与混合导出、重命名export和import,以及ES6之前如何通过函数闭包和CommonJS规范实现模块化。
73 0
VUE学习四:前端模块化,ES6和ES5如何实现模块化
|
2月前
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
|
2月前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
3月前
|
JavaScript 前端开发 API
揭秘现代前端开发秘籍:Vue.js与ES6如何联手打造惊艳应用?
【8月更文挑战第30天】本文介绍如何从零开始使用Vue.js与ES6创建现代前端应用。首先,通过简要介绍Vue.js和ES6的新特性,使读者了解这两者为何能有效提升开发效率。接着,指导读者使用Vue CLI初始化项目,并展示如何运用ES6语法编写Vue组件。最后,通过运行项目验证组件功能,为后续开发打下基础。适用于希望快速入门Vue.js与ES6的前端开发者。
69 3
|
5月前
|
前端开发 JavaScript Java
【前端技术】 ES6 介绍及常用语法说明
【前端技术】 ES6 介绍及常用语法说明
48 4
|
6月前
|
前端开发 JavaScript
【Web 前端】ES6新增的内容有哪些?
【5月更文挑战第1天】【Web 前端】ES6新增的内容有哪些?
【Web 前端】ES6新增的内容有哪些?
|
6月前
|
缓存 前端开发 JavaScript
前端基础知识
【5月更文挑战第8天】前端基础知识
61 5
|
6月前
|
自然语言处理 前端开发
【Web 前端】es6 中的箭头函数?
【5月更文挑战第1天】【Web 前端】es6 中的箭头函数?
|
6月前
|
存储 前端开发 索引
【Web 前端】ES6中,Set和Map的区别 ?
【5月更文挑战第1天】【Web 前端】ES6中,Set和Map的区别 ?
|
6月前
|
前端开发 JavaScript
前端基础知识(一){HTML.CSS.JavaScript}
前端基础知识(一){HTML.CSS.JavaScript}