ECMAScript 6 - ECMAScript 2015

ECMAScript 6 是什么?

ECMAScript 6 也称为 ES6 和 ECMAScript 2015。

一些人把它称作 JavaScript 6。

本章介绍 ES6 中的一些新特性。

  • JavaScript let
  • JavaScript const
  • 幂 (**)
  • 默认参数值
  • Array.find()
  • Array.findIndex()

对 ES6(ECMAScript 2015)的浏览器支持

Safari 10 和 Edge 14 是首先完全支持 ES6 的浏览器:

版本
ECMAScript 2015Chrome 58Edge 14Firefox 54Safari 10Opera 55
2017年1月2016年8月2017年3月 2016年7月2018年8月

JavaScript let

let 语句允许您使用块作用域声明变量。

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>使用 let 声明变量</h1>
  5. <p id="demo">
  6. <script>
  7. var x = 10;
  8. // Here x is 10
  9. {
  10. let x = 2;
  11. // Here x is 2
  12. }
  13. // Here x is 10
  14. document.getElementById("demo").innerHTML = x;
  15. </script>
  16. </body>
  17. </html>

JavaScript const

const 语句允许您声明常量(具有常量值的 JavaScript 变量)。

常量类似于 let 变量,但不能更改值。

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>使用 const 声明变量</h1>
  5. <p id="demo">
  6. <script>
  7. var x = 10;
  8. // Here x is 10
  9. {
  10. const x = 2;
  11. // Here x is 2
  12. }
  13. // Here x is 10
  14. document.getElementById("demo").innerHTML = x;
  15. </script>
  16. </body>
  17. </html>

指数运算符

取幂运算符(**)将第一个操作数提升到第二个操作数的幂。

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>** 运算符</h1>
  5. <p id="demo">
  6. <script>
  7. var x = 5;
  8. document.getElementById("demo").innerHTML = x ** 2;
  9. </script>
  10. </body>
  11. </html>

x ** y 的结果与 Math.pow(x,y) 相同:

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>Math.pow()</h1>
  5. <p id="demo">
  6. <script>
  7. var x = 5;
  8. document.getElementById("demo").innerHTML = Math.pow(x,2);
  9. </script>
  10. </body>
  11. </html>

默认参数值

ES6 允许函数参数具有默认值。

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>默认参数值</h1>
  5. <p id="demo">
  6. <script>
  7. function myFunction(x, y = 10) {
  8. // 如果未通过或未定义,则 y 为 10
  9. return x + y;
  10. }
  11. document.getElementById("demo").innerHTML = myFunction(5);
  12. </script>
  13. </body>
  14. </html>

数组的 find() 方法

find() 方法返回通过测试函数的第一个数组元素的值。

此例查找(返回)第一个大于 18 的元素(的值):

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>数组的 find() 方法</h1>
  5. <p id="demo">
  6. <script>
  7. var numbers = [4, 9, 16, 25, 29];
  8. var first = numbers.find(myFunction);
  9. document.getElementById("demo").innerHTML = "大于 18 的第一个值是:" + first;
  10. function myFunction(value, index, array) {
  11. return value > 18;
  12. }
  13. </script>
  14. </body>
  15. </html>

请注意此函数接受 3 个参数:

  • 项目值
  • 项目索引
  • 数组本身

数组的 findIndex() 方法

findIndex() 方法返回通过测试函数的第一个数组元素的索引。此例确定大于 18 的第一个元素的索引:

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 数组的 findIndex() 方法</h1>
  5. <p id="demo">
  6. <script>
  7. var numbers = [4, 9, 16, 25, 29];
  8. var first = numbers.findIndex(myFunction);
  9. document.getElementById("demo").innerHTML = "大于 18 的第一个值的索引是:" + first;
  10. function myFunction(value, index, array) {
  11. return value > 18;
  12. }
  13. </script>
  14. </body>
  15. </html>

请注意此函数接受 3 个参数:

  • 项目值
  • 项目索引
  • 数组本身

新的数字属性

ES6 将以下属性添加到 Number 对象:

  • EPSILON
  • MIN_SAFE_INTEGER
  • MAX_SAFE_INTEGER
实例
  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>数字对象属性</h1>
  5. <p>EPSILON</p>
  6. <p id="demo">
  7. <script>
  8. var x = Number.EPSILON;
  9. document.getElementById("demo").innerHTML = x;
  10. </script>
  11. </body>
  12. </html>
实例
  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>数字对象属性</h1>
  5. <p>MIN_SAFE_INTEGER</p>
  6. <p id="demo">
  7. <script>
  8. var x = Number.MIN_SAFE_INTEGER;
  9. document.getElementById("demo").innerHTML = x;
  10. </script>
  11. </body>
  12. </html>
实例
  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>数字对象属性</h1>
  5. <p>MAX_SAFE_INTEGER</p>
  6. <p id="demo">
  7. <script>
  8. var x = Number.MAX_SAFE_INTEGER;
  9. document.getElementById("demo").innerHTML = x;
  10. </script>
  11. </body>
  12. </html>

新的数字方法

ES6 为 Number 对象添加了 2 个新方法:Number.isInteger()Number.isSafeInteger()


Number.isInteger() 方法

如果参数是整数,则 Number.isInteger() 方法返回 true

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 数字方法</h1>
  5. <p>如果参数是整数,则 isInteger() 方法返回 true。</p>
  6. <p>否则返回 false。</p>
  7. <p id="demo">
  8. <script>
  9. document.getElementById("demo").innerHTML =
  10. Number.isInteger(10) + "<br>" + Number.isInteger(10.5);
  11. </script>
  12. </body>
  13. </html>

Number.isSafeInteger() 方法

安全整数是可以精确表示为双精度数的整数。

如果参数是安全整数,则 Number.isSafeInteger() 方法返回 true

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 数字方法</h1>
  5. <p>如果参数是安全整数,则 isSafeInteger() 方法返回 true。</p>
  6. <p>否则返回 false。</p>
  7. <p id="demo">
  8. <script>
  9. document.getElementById("demo").innerHTML =
  10. Number.isSafeInteger(10) + "<br>" + Number.isSafeInteger(12345678901234567890);
  11. </script>
  12. </body>
  13. </html>

安全整数指的是从 -(253 - 1) 到 +(253 - 1) 的所有整数。

这是安全的:9007199254740991。这是不安全的:9007199254740992。


新的全局方法

ES6 还增加了 2 个新的全局数字方法:

  • isFinite()
  • isNaN()

isFinite() 方法

如果参数为 InfinityNaN,则全局 isFinite() 方法返回 false。

否则返回 true:

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 数字方法</h1>
  5. <p>如果参数为 Infinity 或 NaN,则 isFinite() 方法返回 false。</p>
  6. <p>否则返回 true。</p>
  7. <p id="demo">
  8. <script>
  9. document.getElementById("demo").innerHTML =
  10. isFinite(10 / 0) + "<br>" + isFinite(10 / 1);
  11. </script>
  12. </body>
  13. </html>

isNaN() 方法

如果参数是 NaN,则全局 isNaN() 方法返回 true。否则返回 false

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 数字方法</h1>
  5. <p>如果参数是 NaN,则 isNan() 方法返回 true。否则返回 false。</p>
  6. <p id="demo">
  7. <script>
  8. document.getElementById("demo").innerHTML =
  9. isNaN("Hello") + "<br>" + isNaN("10");
  10. </script>
  11. </body>
  12. </html>

箭头函数(Arrow Function)

箭头函数允许使用简短的语法来编写函数表达式。

您不需要 function 关键字、return 关键字以及花括号

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 箭头函数</h1>
  5. <p>使用箭头函数,您不必键入 function 关键字、return 关键字和花括号。</p>
  6. <p>IE11 或更早版本不支持箭头功能。</p>
  7. <p id="demo">
  8. <script>
  9. const x = (x, y) => x * y;
  10. document.getElementById("demo").innerHTML = x(5, 5);
  11. </script>
  12. </body>
  13. </html>

箭头功能没有自己的 this。它们不适合定义对象方法

箭头功能未被提升。它们必须在使用进行定义。

使用 const 比使用 var 更安全,因为函数表达式始终是常量值。

如果函数是单个语句,则只能省略 return 关键字和花括号。因此,保留它们可能是一个好习惯:

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 箭头函数</h1>
  5. <p>IE11 或更早版本不支持箭头功能。</p>
  6. <p id="demo">
  7. <script>
  8. const x = (x, y) => { return x * y };
  9. document.getElementById("demo").innerHTML = x(5, 5);
  10. </script>
  11. </body>
  12. </html>

分类导航