Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

JS 教程

JS 主页 JS 简介 JS 在哪里 JS 输出 JS 语句 JS 语法 JS 注释 JS 变量 JS Let JS Const JS 运算符 JS 算术 JS 赋值 JS 数据类型 JS 函数 JS 对象 JS 对象属性 JS 对象方法 JS 对象显示 JS 对象构造函数 JS 事件 JS 字符串 JS 字符串方法 JS 字符串搜索 JS 字符串模板 JS 数字 JS BigInt JS 数字方法 JS 数字属性 JS 数组 JS 数组方法 JS 数组搜索 JS 数组排序 JS 数组迭代 JS 数组 Const JS 日期 JS 日期格式 JS 日期获取方法 JS 日期设置方法 JS 数学 JS 随机数 JS 布尔值 JS 比较 JS If Else JS Switch JS 循环 For JS 循环 For In JS 循环 For Of JS 循环 While JS Break JS 可迭代对象 JS 集合 JS 集合方法 JS 映射 JS 映射方法 JS Typeof JS 类型转换 JS 解构 JS 位运算 JS 正则表达式 JS 优先级 JS 错误 JS 作用域 JS 提升 JS 严格模式 JS this 关键字 JS 箭头函数 JS 类 JS 模块 JS JSON JS 调试 JS 样式指南 JS 最佳实践 JS 错误 JS 性能 JS 保留字

JS 版本

JS 版本 JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS 2019 JS 2020 JS 2021 JS 2022 JS 2023 JS 2024 JS IE / Edge JS 历史

JS 对象

对象定义 对象原型 对象方法 对象属性 对象获取/设置 对象保护

JS 函数

函数定义 函数参数 函数调用 函数 Call 函数 Apply 函数 Bind 函数闭包

JS 类

类简介 类继承 类静态

JS 异步

JS 回调函数 JS 异步 JS Promise JS Async/Await

JS HTML DOM

DOM 简介 DOM 方法 DOM 文档 DOM 元素 DOM HTML DOM 表单 DOM CSS DOM 动画 DOM 事件 DOM 事件监听器 DOM 导航 DOM 节点 DOM 集合 DOM 节点列表

JS 浏览器 BOM

JS 窗口 JS 屏幕 JS 位置 JS 历史记录 JS 导航器 JS 弹出警报 JS 定时 JS Cookie

JS Web API

Web API 简介 Web 表单 API Web 历史记录 API Web 存储 API Web 工作线程 API Web Fetch API Web 地理位置 API

JS AJAX

AJAX 简介 AJAX XMLHttp AJAX 请求 AJAX 响应 AJAX XML 文件 AJAX PHP AJAX ASP AJAX 数据库 AJAX 应用程序 AJAX 例子

JS JSON

JSON 简介 JSON 语法 JSON vs XML JSON 数据类型 JSON 解析 JSON 字符串化 JSON 对象 JSON 数组 JSON 服务器 JSON PHP JSON HTML JSON JSONP

JS vs jQuery

jQuery 选择器 jQuery HTML jQuery CSS jQuery DOM

JS 图形

JS 图形 JS Canvas JS Plotly JS Chart.js JS Google Chart JS D3.js

JS 例子

JS 例子 JS HTML DOM JS HTML 输入 JS HTML 对象 JS HTML 事件 JS 浏览器 JS 编辑器 JS 练习 JS 问答 JS 网站 JS 面试准备 JS 集训营 JS 证书

JS 参考

JavaScript 对象 HTML DOM 对象


Javascript ES6

ECMAScript 2015 是 JavaScript 的第二次重大修订版。

ECMAScript 2015 也称为 ES6 和 ECMAScript 6。

本章描述了 ES6 中最重要的功能。

ES6 中的新功能


浏览器对 ES6 (2015) 的支持

自 2017 年 6 月起,ES6 在所有现代浏览器中得到完全支持。

Chrome
51
Edge
15
Firefox
54
Safari
10
Opera
38
2016 年 5 月 2017 年 4 月 2017 年 6 月 2016 年 9 月 2016 年 6 月

Internet Explorer 不支持 ES6。


JavaScript let

let 关键字允许您声明具有块级作用域的变量。

例子

var x = 10;
// 这里 x 为 10
{
  let x = 2;
  // 这里 x 为 2
}
// 这里 x 为 10
自己试试 »

阅读有关 let 的更多信息:JavaScript Let.


JavaScript const

const 关键字允许您声明常量(一个具有常量值的 JavaScript 变量)。

常量类似于 let 变量,只是其值不能改变。

例子

var x = 10;
// 这里 x 为 10
{
  const x = 2;
  // 这里 x 为 2
}
// 这里 x 为 10
自己试试 »

阅读有关 const 的更多信息:JavaScript Const.


箭头函数

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

您不需要 function 关键字、return 关键字和 **花括号**。

例子

// ES5
var x = function(x, y) {
   return x * y;
}

// ES6
const x = (x, y) => x * y;
自己试试 »

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

箭头函数不会被提升。它们必须在使用之前定义。

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

只有当函数是单语句时,才能省略 return 关键字和花括号。因此,始终保留它们可能是一个好习惯。

例子

const x = (x, y) => { return x * y };
自己试试 »

在本章中了解更多关于箭头函数的信息:JavaScript 箭头函数.


对象解构

解构赋值使得将数组值和对象属性分配给变量变得容易。

例子

// 创建一个对象
const person = {
  firstName: "John",
  lastName: "Doe",
  age: 50,
  eyeColor: "blue"
};

// 解构赋值
let { firstName, age } = person;
自己试试 »

注意

解构对象时,必须使用与相应对象键(名称)相同的名称来命名变量。

键(名称)的顺序无关紧要。


数组解构

解构赋值使得将数组值和对象属性分配给变量变得容易。

例子

// 创建一个数组
const fruits = ["Banana", "Orange", "Apple", "Mango"];

// 解构赋值
let [fruit1, fruit2] = fruits;
自己试试 »

扩展运算符 (...)

... 运算符将可迭代对象(如数组)扩展成更多元素

例子

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];
自己试试 »

... 运算符可用于将可迭代对象扩展成函数调用中的更多参数

例子

const numbers = [23,55,21,87,56];
let maxValue = Math.max(...numbers);
自己试试 »


for/of 循环

JavaScript for/of 语句循环遍历可迭代对象的各个值。

for/of 允许您循环遍历可迭代数据结构,例如数组、字符串、映射、节点列表等等。

for/of 循环具有以下语法

for (variable of iterable) {
  // 要执行的代码块
}

variable - 每次迭代时,下一个属性的值都会被分配给变量。Variable 可以用 constletvar 声明。

iterable - 具有可迭代属性的对象。

循环遍历数组

例子

const cars = ["BMW", "Volvo", "Mini"];
let text = "";

for (let x of cars) {
  text += x + " ";
}
自己试试 »

循环遍历字符串

例子

let language = "JavaScript";
let text = "";

for (let x of language) {
    text += x + " ";
}
自己试试 »

在本章中了解更多信息:JavaScript 循环 For/In/Of.


JavaScript 映射

能够使用对象作为键是映射的重要特性。

例子

const fruits = new Map([
["apples", 500],
["bananas", 300],
["oranges", 200]
]);
自己试试 »

在本章中了解更多关于映射对象的信息,以及映射和数组之间的区别:JavaScript 映射.


JavaScript 集合

例子

// 创建一个集合
const letters = new Set();

// 在集合中添加一些值
letters.add("a");
letters.add("b");
letters.add("c");
自己试试 »

在本章中了解更多关于集合对象的信息:JavaScript 集合.


JavaScript 类

JavaScript 类是 JavaScript 对象的模板。

使用关键字 class 创建一个类。

始终添加名为 constructor() 的方法

语法

class ClassName {
  constructor() { ... }
}

例子

class Car {
  constructor(name, year) {
    this.name = name;
    this.year = year;
  }
}

上面的示例创建了一个名为“Car”的类。

该类具有两个初始属性:“name” 和 “year”。

JavaScript 类不是对象。

它是一个JavaScript 对象的模板


使用类

当您拥有一个类时,您可以使用该类来创建对象

例子

const myCar1 = new Car("Ford", 2014);
const myCar2 = new Car("Audi", 2019);

自己试试 »

在本章中了解更多关于类的信息:JavaScript 类.


JavaScript Promise

Promise 是一个 JavaScript 对象,它将“生成代码”和“消费代码”链接起来。

“生成代码”可能需要一些时间,“消费代码”必须等待结果。

Promise 语法

const myPromise = new Promise(function(myResolve, myReject) {
// “生成代码”(可能需要一些时间)

  myResolve(); // 成功时
  myReject();  // 出错时
});

// “消费代码”(必须等待已完成的 Promise)。
myPromise.then(
  function(value) { /* 成功时的代码 */ },
  function(error) { /* 出错时的代码 */ }
);

使用 Promise 的示例

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 Promise.


Symbol 类型

JavaScript Symbol 是一个原始数据类型,就像 Number、String 或 Boolean 一样。

它表示一个唯一的“隐藏”标识符,其他任何代码都不能意外地访问它。

例如,如果不同的编码人员希望向属于第三方代码的人员对象添加 person.id 属性,他们可能会混合彼此的值。

使用 Symbol() 创建唯一标识符可以解决此问题

例子

const person = {
  firstName: "John",
  lastName: "Doe",
  age: 50,
  eyeColor: "blue"
};

let id = Symbol('id');
person[id] = 140353;
// 现在 person[id] = 140353
// 但 person.id 仍然是未定义的
自己试试 »

注意

符号始终是唯一的。

如果您创建两个描述相同的符号,它们将具有不同的值

Symbol("id") == Symbol("id"); // false

默认参数值

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

例子

function myFunction(x, y = 10) {
  // 如果未传递或未定义,则 y 为 10
  return x + y;
}
myFunction(5); // 将返回 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);
自己试试 »

String.includes()

如果字符串包含指定的值,则 includes() 方法返回 true,否则返回 false

例子

let text = "Hello world, welcome to the universe.";
text.includes("world")    // 返回 true
自己试试 »

String.startsWith()

如果字符串以指定的值开头,则 startsWith() 方法返回 true,否则返回 false

例子

let text = "Hello world, welcome to the universe.";

text.startsWith("Hello")   // 返回 true
自己试试 »

String.endsWith()

如果字符串以指定的值结尾,则 endsWith() 方法返回 true,否则返回 false

例子

var text = "John Doe";
text.endsWith("Doe")    // 返回 true
自己试试 »

Array entries()

例子

创建一个数组迭代器,然后遍历键值对

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() 方法不会更改原始数组。


Array.from()

Array.from() 方法从任何具有 length 属性的对象或任何可迭代对象返回一个数组对象。

例子

从字符串创建数组

Array.from("ABCDEFG")   // 返回 [A,B,C,D,E,F,G]
自己试试 »

Array keys()

keys() 方法返回一个包含数组键的数组迭代器对象。

例子

创建一个包含数组键的数组迭代器对象

const fruits = ["Banana", "Orange", "Apple", "Mango"];
const keys = fruits.keys();

let text = "";
for (let x of keys) {
  text += x + "<br>";
}
自己试试 »

Array find()

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

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

例子

const numbers = [4, 9, 16, 25, 29];
let first = numbers.find(myFunction);

function myFunction(value, index, array) {
  return value > 18;
}
自己试试 »

请注意,该函数采用 3 个参数

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

Array findIndex()

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() 方法

Math.trunc(x) 返回 x 的整数部分

例子

Math.trunc(4.9);    // 返回 4
Math.trunc(4.7);    // 返回 4
Math.trunc(4.4);    // 返回 4
Math.trunc(4.2);    // 返回 4
Math.trunc(-4.2);    // 返回 -4
自己试试 »

Math.sign() 方法

Math.sign(x) 返回 x 是否为负、零或正

例子

Math.sign(-4);    // 返回 -1
Math.sign(0);    // 返回 0
Math.sign(4);    // 返回 1
自己试试 »

Math.cbrt() 方法

Math.cbrt(x) 返回 x 的立方根

例子

Math.cbrt(8);    // 返回 2
Math.cbrt(64);    // 返回 4
Math.cbrt(125);    // 返回 5
自己试试 »

Math.log2() 方法

Math.log2(x) 返回 x 的以 2 为底的对数

例子

Math.log2(2);    // 返回 1
自己试试 »

Math.log10() 方法

Math.log10(x) 返回 x 的以 10 为底的对数

例子

Math.log10(10);    // 返回 1
自己试试 »

新的数字属性

ES6 为 Number 对象添加了以下属性

  • EPSILON
  • MIN_SAFE_INTEGER
  • MAX_SAFE_INTEGER

EPSILON 示例

let x = Number.EPSILON;
自己试试 »

MIN_SAFE_INTEGER 示例

let x = Number.MIN_SAFE_INTEGER;
自己试试 »

MAX_SAFE_INTEGER 示例

let x = Number.MAX_SAFE_INTEGER;
自己试试 »

Number.isInteger() 方法

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

例子

Number.isInteger(10);        // 返回 true
Number.isInteger(10.5);      // 返回 false
自己试试 »

Number.isSafeInteger() 方法

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

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

例子

Number.isSafeInteger(10);    // 返回 true
Number.isSafeInteger(12345678901234567890);  // 返回 false
自己试试 »

安全整数是所有从 -(253 - 1) 到 +(253 - 1) 的整数。
这是安全的:9007199254740991。这是不安全的:9007199254740992。


新的全局方法

ES6 添加了 2 个新的全局数字方法

  • isFinite()
  • isNaN()

isFinite() 方法

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

否则它返回 true

例子

isFinite(10/0);       // 返回 false
isFinite(10/1);       // 返回 true
自己试试 »

isNaN() 方法

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

例子

isNaN("Hello");       // 返回 true
自己试试 »

模块

模块以两种不同的方式导入

从命名导出导入

从文件 person.js 导入命名导出

import { name, age } from "./person.js";

自己试试 »

从默认导出导入

从文件 message.js 导入默认导出

import message from "./message.js";

自己试试 »

了解更多关于模块的信息:JavaScript 模块.


×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.