当前位置: 首页 > news >正文

5分钟快速了解es6常用特性

let与const

let也是用来声明变量的关键字,与var的区别是

  • 代码块内有效
  • 不存在变量提升
  • 不允许重复声明

代码块里有效

{
  let a = 10;
  var b = 1;
}

a // ReferenceError: a is not defined.
b // 1
复制代码

不存在变量提升

// var 的情况
console.log(foo); // 输出undefined
var foo = 2;

// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
复制代码

不允许重复声明

// 报错
function func() {
  let a = 10;
  var a = 1;
}

// 报错
function func() {
  let a = 10;
  let a = 1;
}
复制代码

const用来声明常量

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动

Destructuring(解构)

定义:按照一定模式,从数组和对象中提取值,对变量进行赋值

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

模板字符串

通常情况下,我们拼接字符串是这样的

var a="变量";
console.log("这是一个"+a);
复制代码

在es6中我们可以这样,变量多的时候很省事有木有

var a="变量";
console.log(`这是一个${a}`);
复制代码

symbol简介

新的原始数据类型Symbol,表示独一无二的值

Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。

// 没有参数的情况
let s1 = Symbol();
let s2 = Symbol();

s1 === s2 // false

// 有参数的情况
let s1 = Symbol('foo');
let s2 = Symbol('foo');

s1 === s2 // false
复制代码

Set

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

// 数组去重简直不要太6
const set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]
复制代码

Map

它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键

const m = new Map();
const o = {p: 'Hello World'};

m.set(o, 'content')
m.get(o) // "content"

m.has(o) // true
m.delete(o) // true
m.has(o) // false
复制代码

Promise

Promise 是异步编程的一种解决方案

三种状态

  • pending(进行中)
  • fulfilled(已成功)
  • rejected(已失败)

两种过程

  • pending -> fulfilled
  • pending -> rejected

一个常用方法then

getJSON("/posts.json").then(function(json) {
  return json.post;
}).then(function(post) {
  // ...
});
复制代码

三二一帮助记忆O(∩_∩)O哈哈~

class

ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。

原型链的写法

function Point(x, y) {
  this.x = x;
  this.y = y;
}

Point.prototype.toString = function () {
  return '(' + this.x + ', ' + this.y + ')';
};

var p = new Point(1, 2);
复制代码

类的写法

//定义类
class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }

  toString() {
    return '(' + this.x + ', ' + this.y + ')';
  }
}
复制代码

module

我们知道开发大型的应用都需要模块,而es5是没有模块体系的。

在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。

es6的模块主要是两个命令

  • import
  • export

export类似于modules.exports

var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;

export {firstName, lastName, year};

复制代码

import类似于require

// main.js
import {firstName, lastName, year} from './profile.js';

function setName(element) {
  element.textContent = firstName + ' ' + lastName;
}
复制代码

参考资料

  • 《ECMAScript 6 入门》

相关文章:

  • Hadoop 2.0 NameNode HA和Federation实践
  • 再也不用担心this指向的问题了
  • 快速理解URL重写
  • 12月,1000人,来一场属于敏捷人的重逢吧!
  • 话里话外:成功CEO的用人之道——按需激励
  • 001-ant design pro 页面加载原理及过程,@connect 装饰器
  • 对ASP网站程序的设计
  • “一盘货卖全球”之后,天猫今年将推出国货“出海2.0版”
  • 分析图第一讲前期准备,渲染白模5.9
  • java如何获取SQL查询结果集中的行数和列数
  • 中小型企业到底需要什么样的ERP
  • 常见Filed Types
  • launcher 分析
  • 响应式一级到三级导航
  • 纯键盘开发实战(Mouseless Programming)
  • Create React App 使用
  • CSS居中完全指南——构建CSS居中决策树
  • Go 语言编译器的 //go: 详解
  • HTTP 简介
  • Java比较器对数组,集合排序
  • Laravel Mix运行时关于es2015报错解决方案
  • MySQL主从复制读写分离及奇怪的问题
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Sass 快速入门教程
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vuex 笔记整理
  • Web标准制定过程
  • yii2中session跨域名的问题
  • 服务器从安装到部署全过程(二)
  • 山寨一个 Promise
  • 探索 JS 中的模块化
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #etcd#安装时出错
  • #每天一道面试题# 什么是MySQL的回表查询
  • #预处理和函数的对比以及条件编译
  • (0)Nginx 功能特性
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (搬运以学习)flask 上下文的实现
  • (二)PySpark3:SparkSQL编程
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (三)mysql_MYSQL(三)
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (转) Android中ViewStub组件使用
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET delegate 委托 、 Event 事件
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 使用 XPath 来读写 XML 文件
  • .NetCore部署微服务(二)
  • /var/spool/postfix/maildrop 下有大量文件
  • [17]JAVAEE-HTTP协议
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [ABC294Ex] K-Coloring
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序