ECMAScript 2015 是 JavaScript 的第二次重大修订。
ECMAScript 2015 也称为 ES6 和 ECMAScript 6。
本章介绍 ES6 最重要的特性。
Safari 10 和 Edge 14 是首批完全支持 ES6 的浏览器:
Chrome 58 | Edge 14 | Firefox 54 | Safari 10 | Opera 55 |
Jan 2017 | Aug 2016 | Mar 2017 | Jul 2016 | Aug 2018 |
这个let
关键字允许您声明具有块作用域的变量。
阅读更多关于let
在章节中:JavaScript 让。
这个const
关键字允许您声明常量(具有常量值的 JavaScript 变量)。
常量与 let 变量类似,只是其值不能更改。
阅读更多关于const
在章节中:JavaScript 常量。
箭头函数允许使用简短的语法来编写函数表达式。
你不需要function
关键字,return
关键字,以及大括号。
箭头函数没有自己的this
。它们不太适合定义对象方法。
箭头函数不会被提升。它们必须被定义前他们被使用了。
使用const
比使用更安全var
,因为函数表达式始终是常量值。
您只能省略return
如果函数是单个语句,则包含关键字和大括号。正因为如此,始终保留它们可能是一个好习惯:
在本章中了解有关箭头函数的更多信息:JavaScript 箭头函数。
... 运算符将可迭代对象(如数组)扩展为更多元素:
const q1 = ["Jan", "Feb", "Mar"];
const q2 = ["Apr", "May", "Jun"];
const q3 = ["Jul", "Aug", "Sep"];
const q4 = ["Oct", "Nov", "May"];
const year = [...q1, ...q2, ...q3, ...q4];
亲自试一试 »
... 运算符可用于将可迭代扩展为函数调用的更多参数:
JavaScriptfor/of
语句循环遍历可迭代对象的值。
for/of
允许您循环遍历可迭代的数据结构,例如数组、字符串、映射、节点列表等。
这个for/of
循环具有以下语法:
for (
variable of
iterable) {
//
code block to be executed
}
多变的- 对于每次迭代,下一个属性的值都会分配给变量。多变的可以声明为const
,let
, 或者var
。
可迭代的- 具有可迭代属性的对象。
const cars = ["BMW", "Volvo", "Mini"];
let text = "";
for (let x of cars) {
text += x + " ";
}
亲自试一试 »
在本章中了解更多信息:JavaScript 循环 For/In/Of。
能够使用对象作为键是一个重要的 Map 功能。
在本章中了解有关 Map 对象以及 Map 和 Array 之间的区别的更多信息:JavaScript 地图。
// Create a Set
const letters = new Set();
// Add some values to the Set
letters.add("a");
letters.add("b");
letters.add("c");
亲自试一试 »
在本章中了解有关 Set 对象的更多信息:JavaScript 集。
JavaScript 类是 JavaScript 对象的模板。
使用关键字class
创建一个类。
始终添加一个名为constructor()
:
class ClassName {
constructor() { ... }
}
class Car {
constructor(name, year) {
this.name = name;
this.year = year;
}
}
上面的示例创建了一个名为"Car" 的类。
该类有两个初始属性:"name" 和 "year"。
JavaScript 类是不是一个东西。
它是一个模板对于 JavaScript 对象。
当你有一个类时,你可以使用该类来创建对象:
在本章中了解有关类的更多信息:JavaScript 类。
Promise 是一个链接 "Producing Code" 和 "Consuming Code" 的 JavaScript 对象。
"Producing Code" 可能需要一些时间,并且 "Consuming Code" 必须等待结果。
const myPromise = new Promise(function(myResolve, myReject) {
// "Producing Code" (May take some time)
myResolve(); // when successful
myReject(); // when error
});
// "Consuming Code" (Must wait for a fulfilled Promise).
myPromise.then(
function(value) { /* code if successful */ },
function(error) { /* code if some error */ }
);
const myPromise = new Promise(function(myResolve, myReject) {
setTimeout(function() { myResolve("I love You !!"); }, 3000);
});
myPromise.then(function(value) {
document.getElementById("demo").innerHTML = value;
});
在本章中了解有关 Promise 的更多信息:JavaScript 承诺。
JavaScript 符号是一种原始数据类型,就像数字、字符串或布尔值一样。
它代表一个唯一的"hidden" 标识符,其他代码无法意外访问该标识符。
例如,如果不同的编码人员想要将 person.id 属性添加到属于第三方代码的 person 对象,他们可以混合彼此的值。
使用Symbol()创建唯一标识符,解决了这个问题:
const person = {
firstName: "John",
lastName: "Doe",
age: 50,
eyeColor: "blue"
};
let id = Symbol('id');
person[id] = 140353;
// Now person[id] = 140353
// but person.id is still undefined
亲自试一试 »
符号总是独一无二的。
如果您创建两个具有相同描述的符号,它们将具有不同的值:
Symbol("id") == Symbol("id"); // false
ES6 允许函数参数有默认值。
function myFunction(x, y = 10) {
// y is 10 if not passed or undefined
return x + y;
}
myFunction(5); // will return 15
亲自试一试 »
剩余参数 (...) 允许函数将不定数量的参数视为数组:
function sum(...args) {
let sum = 0;
for (let arg of args) sum += arg;
return sum;
}
let x = sum(4, 9, 16, 25, 29, 100, 66, 77);
亲自试一试 »
这个includes()
方法返回true
如果字符串包含指定值,否则false
:
let text = "Hello world, welcome to the universe.";
text.includes("world") // Returns true
亲自试一试 »
这个startsWith()
方法返回true
如果字符串以指定值开头,否则false
:
let text = "Hello world, welcome to the universe.";
text.startsWith("Hello") // Returns true
亲自试一试 »
这个endsWith()
方法返回true
如果字符串以指定值结尾,否则false
:
这个Array.from()
方法从任何具有 length 属性的对象或任何可迭代对象返回一个 Array 对象。
这个keys()
方法返回一个带有数组键的数组迭代器对象。
创建一个数组迭代器对象,包含数组的键:
const fruits = ["Banana", "Orange", "Apple", "Mango"];
const keys = fruits.keys();
let text = "";
for (let x of keys) {
text += x + "<br>";
}
亲自试一试 »
这个find()
方法返回通过测试函数的第一个数组元素的值。
此示例查找(返回 的值)第一个大于 18 的元素:
const numbers = [4, 9, 16, 25, 29];
let first = numbers.find(myFunction);
function myFunction(value, index, array) {
return value > 18;
}
亲自试一试 »
请注意,该函数有 3 个参数:
这个findIndex()
方法返回通过测试函数的第一个数组元素的索引。
此示例查找第一个大于 18 的元素的索引:
const numbers = [4, 9, 16, 25, 29];
let first = numbers.findIndex(myFunction);
function myFunction(value, index, array) {
return value > 18;
}
亲自试一试 »
请注意,该函数有 3 个参数:
ES6 在 Math 对象中添加了以下方法:
Math.trunc()
Math.sign()
Math.cbrt()
Math.log2()
Math.log10()
Math.trunc(x)
返回 x 的整数部分:
Math.trunc(4.9); // returns 4
Math.trunc(4.7); // returns 4
Math.trunc(4.4); // returns 4
Math.trunc(4.2); // returns 4
Math.trunc(-4.2); // returns -4
亲自试一试 »
Math.sign(x)
如果 x 为负、空或正则返回:
Math.cbrt(x)
返回 x 的立方根:
Math.log2(x)
返回 x 以 2 为底的对数:
Math.log10(x)
返回 x 以 10 为底的对数:
ES6 向 Number 对象添加了以下属性:
EPSILON
MIN_SAFE_INTEGER
MAX_SAFE_INTEGER
ES6 向 Number 对象添加了 2 个新方法:
Number.isInteger()
Number.isSafeInteger()
这个Number.isInteger()
方法返回true
如果参数是整数。
安全整数是可以精确表示为双精度数的整数。
这个Number.isSafeInteger()
方法返回true
如果参数是安全整数。
Number.isSafeInteger(10); // returns true
Number.isSafeInteger(12345678901234567890); // returns false
亲自试一试 »
安全整数是来自 -(253- 1) 至 +(253- 1).
这是安全的:9007199254740991。这是不安全的:9007199254740992。
ES6 添加了 2 个新的全局编号方法:
isFinite()
isNaN()
全球isFinite()
方法返回false
如果参数是Infinity
或者NaN
。
否则返回true
:
全球isNaN()
方法返回true
如果参数是NaN
。否则返回false
:
创建一个数组迭代器,然后迭代键/值对:
const fruits = ["Banana", "Orange", "Apple", "Mango"];
const f = fruits.entries();
for (let x of f) {
document.getElementById("demo").innerHTML += x;
}
亲自试一试 »
这个entries()
方法返回一个带有键/值对的数组迭代器对象:
[0,"Banana"]
[1,"Orange"]
[2,"Apple"]
[3,"Mango"]
这个entries()
方法不会改变原始数组。
模块以两种不同的方式导入:
了解有关模块的更多信息:JavaScript 模块。