JavaScript:ES6的新特性
1、关键字
const:修饰常量。ES6之前只有变量的声明字段var,ES6开始引入常量关键字,被修饰的变量无法被修改。
<script type="text/javascript">
var name1 = "XYQ"
console.log(name1); //XYQ
name1 = "ZZZ"
console.log(name1); //ZZZ
const name2 = "XYQ"
console.log(name2); //XYQ
name2 = "ZZZ" //TypeError: Attempted to assign to readonly property.
console.log(name2) //无法打印
</script>
let:限定作用域。ES6之前字段var修饰的全局变量作用域被重置后局部会影响全局的值,ES6引入let关键字,在局部对作用域进行限制,局部无法修改全局值。
<script type="text/javascript">
var name1 = "XYQ"
if (name1) {
var name1 = "ZZZ" // 作用域被重置
console.log(name1) // ZZZ
}
console.log(name1) // ZZZ,全局变量的值在局部被修改
var name2 = "XYQ"
if (name2) {
let name2 = "ZZZ" // 作用域被限制
console.log(name2) // ZZZ
}
console.log(name2) // XYQ,全局变量的值仍然保持不变
</script>
2、模板字符串
ES6之前传统字符串用“+”进行拼接
ES6开始字符串可用“ `${varName}` ”进行拼接,这个语法叫模板字符串,在符号内还支持空格、代码片段等。注意中间特殊符号不是单引号,它称为反引号。
<script type="text/javascript">
//传统字符串拼接
var x1 = "X"
var y1 = "Y"
var q1 = "Q"
var xyq1 = "Hello" + "," + x1 + y1 + q1 + "!"
console.log(xyq1) // Hello,XYQ!
//模板字符串拼接
var x2 = "X"
var y2 = "Y"
var q2 = "Q"
var xyq2 = `Hello,${x2}${y2}${q2},!`
console.log(xyq2) // Hello, XYQ!
</script>
3、函数默认参数
ES6开始对于任意一个函数都支持默认参数功能,如果开发者没有传入参数,则使用默认的参数。参数类型不限,可以是数值型,字符串,也可以是对象等等。
<script type="text/javascript">
function sum(a=1,b=2) {
return a+b;
}
var sum1 = sum() //不传入参数,使用默认参数计算
console.log(`sum is ${sum1}`) //sum is 3
var sum2 = sum(4, 6) //传入参数,使用传入的参数计算
console.log(`sum is ${sum2}`) //sum is 10
</script>
4、箭头函数
ES6开始,箭头函数的引入直接将函数的使用简单到极致。格式符号为"=>",使用它可以省略function关键字,甚至还可以省略return关键字。
<script type="text/javascript">
//传统函数
function combinate1(str1,str2) {
return str1 + str2
}
var string1 = combinate1('name is ','XYQ')
console.log(string1) //name is XYQ
//箭头函数
//0、无参数, 不可省略圆括号
var print = () => {
return 'XYQ'
}
console.log(print()) //XYQ
//1、一个参数, 省略圆括号()
var getNameFuction = name => `${name}`
var string2 = getNameFuction('XYQ')
console.log(string2) //XYQ
//2、多个参数, 圆括号()不可省略
var sumFuction = (a,b) => `${a}+${b}=${a+b}`
var sum = sumFuction(3,4)
console.log(sum) //3+4=7
//3、表达式的代码块
var print = animal => {
if (animal === 'dog') {
console.log('dog eat bone !')
}
else if (animal === 'cat') {
console.log('cat eat fish !')
}
else{
console.log('animal unkonw!')
}
}
print('cat') //cat eat fish
</script>
5、解构赋值
ES6开始,可以将对象属性字段的作用域进行本地化,类似于将对象中的属性在本地拷贝下来作为局部变量使用,但是对局部变量的修改,不影响对象的属性。
一般对象解构:
<script type="text/javascript">
//定义对象
var person = {
name: "XYQ",
age: 20,
sex: "male"
}
//对象属性作用域本地化, 创建相应局部变量
var {name,age,sex} = person
console.log(name,age,sex) //XYQ 20 male
//修改布局变量值
name = "Lucy"
age = 18
sex = "female"
console.log(name,age,sex) //Lucy 18 female
//原对象的属性值保持不变
console.log(person.name,person.age,person.sex) //XYQ 20 male
</script>
数组对象解构:
<script type="text/javascript">
//定义数组对象
var array = ["Math","Chinese","English"]
//将数组元素进行解构,创建一个新的数组对象, 新数组中的元素会与原数组元素顺序一致,一一对应
var [ele1,ele2] = array
console.log(ele1) //Math
console.log(ele2) //Chinese
//可以使用“,”进行列表匹配,获取指定的元素,匹配时:逗号表示跳过该元素
var [,,ele] = array
console.log(ele) //English
</script>
6、对象语义增强
ES6开始,对象语义增强与解构正好相反,它可以将全局变量转成对象,还可以直接省去了function关键字。
<script type="text/javascript">
//定义全局属性变量
var name = "XYQ"
var age = 20
var sex = "male"
//定义全局函数变量,this代表person对象
var description = () => {
return `name is ${this.name}, age=${this.age}, sex is ${this.sex}`
}
//将全局变量转成person对象
var person = {name,age,sex,description}
console.log(person) // {name: "XYQ", age: 20, sex: "male"}
var string = person.description()
console.log(string) // name is XYQ, age=20, sex is male
</script>
7、扩展运算符
ES6开始,支持使用三个点“.”来合并数组。也就是可以将多个数组合并成一个新的数组。还可以获取剩余数组元素等。
<script type="text/javascript">
//定义两个数组
var sub = ["Math","Chinese","English"]
var score = [100, 90, 90]
//合并成新的数组
var array = [...sub, ...score]
console.log(array) // ["Math", "Chinese", "English", 100, 90, 90] (6)
//获取剩余数组元素
var [ele, ...rest] = array
console.log(ele) //Math
console.log(rest) //["Chinese", "English", 100, 90, 90] (5)
</script>
8、Promise对象
在传统的ajax异步请求中,一般会将操作和回调写在同一个代码块内,如果是多层嵌套请求,那么结构就会非常臃肿复杂。ES6开始,Promise对象提供了一种更合理的方式处理异步请求行为,也即采用链式编程的思想。Promise对象接收一个函数作为参数,这个函数执行是请求操作,当然这个函数也会接收两个形参函数,分别代表成功和失败的逻辑操作,Promise对象可以直接在尾部通过.then函数来处理回调结果。这种Promise对象可以使得异步代码层次清晰,便于理解,且更加容易维护。

<script type="text/javascript"> //创建Promise对象发送请求
const promiseManager = (index) => new Promise( //定义请求逻辑函数,该函数可以放在外部传入
//resolve:请求成功的回调
//reject:请求失败的回调
(resolve, reject) => {
setTimeout(()=> {
let num = Math.ceil(Math.random() * 10)
if (num > `${index}`) {
resolve(num)
} else {
reject(num)
}
},1000)
}
)
.then(
(result)=>{
console.log(`result is ${result}`) //成功的回调
}
/*,
(error)=>{
console.log(`error is ${error}`) //失败的回调
} */
)
.catch(
(error)=>{
console.log(`error is ${error}`) //失败的回调, 这个方式等同于上面注释的代码
}
)
//发送请求,上面的then函数也可以放在调用后面执行. 如 promiseManager(3).then(func)
promiseManager(3) </script>
9、类(Class)
在ES6之前,JavaScript没有类的概念,类型的定义是通过函数来实现的。其中,通过函数完成的类,要给这个类添加方法必须使用原型prototype关键字来定义。在ES6之后,使用class关键字来声明类,而且同样可以使用extends关键字来继承父类。这个设计,使得语法更加面向对象化,开发者更加容易理解。
<script type="text/javascript">
//方式一:通过函数定义类
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.instroduceInfo = function(){ //使用prototype定义instroduceInfo函数
console.log(`my name is ${this.name}, age is ${this.age}`)
}
//创建对象
var p1 = new Person("XYQ", 25)
p1.instroduceInfo() // my name is XYQ, age is 25
//方式二:通过关键字class定义类
class Animal{
//构造器
constructor(name, age){
this.name = name
this.age = age
}
eat(food){
console.log(`the animal is ${this.name}, it is ${this.age} years old, it eat ${food}`)
}
}
class Cat extends Animal{ //继承关系,通过extends关键字
//通过父类构造器初始化
constructor(name, age, food){
super(name, age)
this.food = food
}
eat(){ //跟函数重载有点类似
super.eat(this.food) //调用父类方法
}
}
//创建对象
var cat = new Cat("cat", 4, "fish")
cat.eat(); // the animal is cat, it is 4 years old, it eat fish
</script>
10、模块导出和导入
ES6 (babel/webpack)
导出格式:export variable、export defalut variable
导入格式:import variable from "file_path"、import {variable,...} from "file_path"、import * as variable from "file_path"
//data.js文件 //支持导出变量
//1、导出变量,使用export导出成员,称为按需导出,接收者必须使用{}接收
export var name = 'XYQ'
export var age = 25
export var sex = "male" //2、使用export default导出成员,这个成员类型必须是只有一种类型,接收者不能使用{}接收
const person = new Person("XYQ", 25, "male")
export default person //3、导出函数成员
export const print(message) => log(message)
export const log(message) => console.log(`message is ${message}`)
//main.js文件
//1、使用{}接收按需导出的成员, 接收的成员类型有多种:字符串、整型等,在大括号中选择需要的变量名称必须与源文件中的保持一致
import { name, age, sex } from "./data.js" //虽然全部导出了,但是接收者可以选择需要的成员变量,不一定需要全部接收
console.log(`name is ${name}, age is ${age}, sex is ${sex}`)
//2、接收导出的成员, 接收的成员类型只有一种,不要使用{},例如这个person是对象类型
import person from "./data.js"
console.log(`person is ${person}`)
//3、接收导出的函数
import {print, log} from "./data.js"
print("XYQ")
log("XYQ")
//4、接收导出的函数,同时定义别名
import {print as pt, log as lg} from "./data.js"
pt("XYQ")
lg("XYQ")
//5、接收全部信息导入到单个变量中, 此处放入到receive中
import * as receive from "./data.js"
CommonJS (node)
导出格式:module.exports = {variable,...}
导入格式:variable = require('file_path')、{variable,...} = require('file_path')
//data.js文件 //成员
const var name = "XYQ"
const print(message) => log(message)
const log(message) => console.log(`message is ${message}`) //导出
module.exports = {name, print, log}
//main.js文件 //导入
const var info = require('./data.js')
const {name, print, log} = require('./data.js')
注意事项:

JavaScript:ES6的新特性的更多相关文章
- 使用JavaScript ES6的新特性计算Fibonacci(非波拉契数列)
程序员面试系列 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Java Mar ...
- ES6常用新特性
https://segmentfault.com/a/1190000011976770?share_user=1030000010776722 该文章为转载文章!仅个人喜好收藏文章! 1.前言 前几天 ...
- ES6 && ECMAScript2015 新特性
ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES201 ...
- JavaScript ES6 数组新方法 学习随笔
JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var ...
- ES6相关新特性介绍
你可能已经听说过 ECMAScript 6 (简称 ES6)了.ES6 是 Javascript 的下一个版本,它有很多很棒的新特性.这些特性复杂程度各不相同,但对于简单的脚本和复杂的应用都很有用.在 ...
- es6的新特性--模板字符串
这几天简单看了一下深入浅出es6这本书,感觉特实用,学习了一个新特性---模板字符串在项目开发中,拼接字符串是不可缺少的,动态创建dom元素以及js操作数据都要拼接字符串,在es6出来之前,我们都通常 ...
- JS - ECMAScript2015(ES6)新特性
友情提示:本文仅mark几个常用的新特性,详细请参见:ES6入门 - ryf: 碎片 var VS let VS const var:声明全局变量, let:声明块级变量,即局部变量 const:声明 ...
- ES6的新特性(1)——ES6 的概述
ES6 的概述 首先,感谢马伦老师的ES6新特性的教程. ECMAScript 和 JavaScript 的关系是 ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前 ...
- H5、C3、ES6的新特性
H5的新特性 1.语义化标签 有利于SEO,有助于爬虫抓取更多的有效信息,爬虫是依赖于标签来确定上下文和各个关键字的权重. 语义化的HTML在没有CSS的情况下也能呈现较好的内容结构与代码结构 方便其 ...
- ES6实用新特性
兼容性 http://kangax.github.io/compat-table/es5/ http://kangax.github.io/compat-table/es6/ ES6(ES2015)兼 ...
随机推荐
- SecureCRT 破解安装详细教程
SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序 跟xshell类似. 一.下载文件软件包和破解文件(64版本),我已经放在百度云,链接:https://pan.baidu.c ...
- docx和doc的区别
docx和doc这两者间就相差一个字母x,可就是这一个简简单单的x有时候也会引申出很多的问题,比如这个案例,在一次研究生期末考试的考查课上,老师要求每个人事先结合自己的思路以及该课程,写一篇报告总结, ...
- acwing 850. Dijkstra求最短路 II 模板
地址 https://www.acwing.com/problem/content/description/852/ 给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值. 请你求 ...
- Eclipse alt+/语法不提示的解决方法
最近公司电脑上的Eclipse没有了自动提示功能,也不是全部不提示,大多数情况下按下“alt+/”键还会产生提示,但是当我在java项目中邪main方法和syso的时候,“alt+/”则会失效,今天在 ...
- 用dotnet core 搭建web服务器(一)http server
环境说明 dotnet core,开发需要安装dotnetcore sdk,运行需要安装 dotnetcore runtime 运行目前几乎支持所有常见平台 开发推荐windows10 平台 首先安装 ...
- Mybatis中的#{}和${}的区别?
1,首先Mybatis中的#{}与${}到底有什么区别? #{}:表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{} ...
- DEBUG的基本命令的使用[MASM]
DEBUG的基本命令的使用 DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段. DEBUG的命令都是一个字母,后跟一个或多个参数:字母 ...
- 基于node.js人脸识别之人脸对比
基于node.js人脸识别之人脸对比 Node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O ...
- vue 客户端渲染和服务端渲染
参考链接 https://www.cnblogs.com/tiedaweishao/p/6644267.html
- 10分钟彻底理解Redis的持久化机制:RDB和AOF
作者:张君鸿 juejin.im/post/5d09a9ff51882577eb133aa9 什么是Redis持久化? Redis作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客 ...