JavaScript


JavaScript ( JS ) 是轻量、解释型或 即时 编译的编程语言采用 一类函数 。虽然它是最著名的网页脚本语言, 许多非浏览器环境 也使用它,如 Node.js , Apache CouchDB and Adobe Acrobat . JavaScript 是 基于原型 、多范式、单线程、动态语言、支持面向对象、命令式和声明式 (如:函数式编程) 风格。阅读更多 关于 JavaScript .

本章节专注于 JavaScript 语言本身,而不是特定网页或其它主机环境部分。了解信息关于 API 特定网页,请参阅 Web APIs and DOM .

JavaScript 的标准是 ECMAScript 。截至 2012 年,所有 现代浏览器 均完全支持 ECMAScript 5.1。较旧的浏览器至少支持 ECMAScript 3。2015 年 6 月 17 日, ECMA 国际 发布 ECMAScript 的第 6 个主版本,正式称为 ECMAScript 2015,最初称为 ECMAScript 6 或 ES6。从那时起,ECMAScript 标准每年发布一次。本文档编制引用最新草稿版本,目前是 ECMAScript 2020 .

不要混淆 JavaScript 与 Java 编程语言 。Java 和 JavaScript 是 Oracle 在美国及其它国家的商标或注册商标。不管怎样,这 2 种编程语言有非常不同的句法、语义及用法。

想成为前端 Web 开发者吗?

我们已整合包括您努力实现目标所需的所有必要信息的课程。

入门

教程

通过指南和教程,学习如何使用 JavaScript 进行编程。

完全初学者

前往我们的 学习区域 JavaScript 话题 若您想要学习 JavaScript 但没有 JavaScript 或编程经验。可提供的完整模块如下:

JavaScript 第一步
回答一些基础问题,如:"JavaScript 是什么?","它看起来像什么?" 且 "它能做什么?",和讨论关键 JavaScript 特征,如:变量、字符串、数字和数组。
JavaScript 构建块
继续介绍 JavaScript 的关键基础特征,把注意力转移到经常遇到的代码块类型,如:条件语句、循环、函数及事件。
引入 JavaScript 对象
理解 JavaScript 自然面向对象很重要若想要进一步了解语言知识并编写更高效代码,因此我们提供此模块来帮助您。
异步 JavaScript
讨论异步 JavaScript,为什么它是重要的,及如何使用它来有效处理潜在阻塞操作 (如:从服务器抓取资源)。
客户端侧 Web API
探索什么是 API,及如何使用在开发工作中经常遇到的一些最常见 API。

JavaScript 指南

JavaScript 指南
更详细的 JavaScript 语言指南,针对那些以前有 JavaScript 或其它语言编程经验者。

中间体

理解客户端侧 JavaScript 框架
JavaScript 框架是开发现代前端 Web 的必要部分,它为开发者提供经过验证的工具用于构建可伸缩、交互式 Web 应用程序。此模块为您提供有关客户端侧框架如何工作及如何拟合工具集的一些基础背景知识,在继续学习涵盖当今某些最流行的系列教程之前。
重新介绍 JavaScript
概述给那些人 think 他们知道 JavaScript。
JavaScript 数据结构
JavaScript 可用数据结构的概述。
相等比较和相同
JavaScript 提供 3 种不同值比较操作:严格相等使用 === ,稀疏相等使用 == ,和 Object.is() 方法。
闭包

闭包是函数和在其中声明函数的词汇环境的组合。

高级

继承和原型链
对广泛误解和基于原型的继承的低估的解释。
严格模式
严格模式定义不可以使用任何变量在初始化之前。它是 ECMAScript 5 的受限变体,可提高性能并简化调试。
JavaScript 类型数组
JavaScript 类型数组提供访问原生二进制数据的机制。
内存管理
JavaScript 中的内存生命周期和垃圾回收。
并发模型和事件循环
JavaScript 拥有基于事件循环的并发模型。

参考

浏览完整 JavaScript 参考 文档编制。

标准对象
了解标准内置对象 Array , Boolean , Date , Error , Function , JSON , Math , Number , Object , RegExp , String , Map , Set , WeakMap , WeakSet ,等。
表达式和运算符
学习更多关于 JavaScript 运算符的行为 instanceof , typeof , new , this 运算符优先级 ,等。
语句和声明
学习如何 do-while , for-in , for-of , try-catch , let , var , const , if-else , switch ,及更多 JavaScript 语句和关键字。
函数
学习如何使用 JavaScript 函数来开发应用程序。

工具 & 资源

有帮助的工具为编写 调试 JavaScript 代码。

Firefox 开发者工具
Web 控制台 , JavaScript Profiler , Debugger ,等。
JavaScript Shells
JavaScript Shell 允许快速测试 JavaScript 代码段。
Learn JavaScript
有抱负 Web 开发者的优秀资源 — 在交互环境中学习 JavaScript,通过短课和交互测试,由自动评价指导。前 40 节课免费,一次性支付少量费用就可获得完整课程。
TogetherJS
使协作变容易。通过把 TogetherJS 添加到站点,用户可以在网站上实时互相帮助!
Stack Overflow
采用 JavaScript 标记的堆栈溢出问题。
JavaScript 版本和发行说明
浏览 JavaScript 的特征历史和实现状态。
JSFiddle
编辑 JavaScript、CSS、 HTML 及获取实时结果。使用外部资源并与您的团队在线合作。
Plunker
Plunker 是创建、协作及分享 Web 开发想法的在线社区。编辑 JavaScript、CSS、HTML 文件,并获得实时结果和文件结构。
JSBin

JS Bin 是开源协作 Web 开发调试工具。

Codepen

Codepen 是另一个用作实时结果操场的协作 Web 开发工具。

StackBlitz

StackBlitz 是另一在线游乐场/调试工具,可以使用 React、Angular 等托管 部署全栈应用程序。

Metadata

在此页

 

  1. JavaScript
  2. 教程:
  3. 完整初学者
    1. JavaScript 基础
    2. JavaScript 第一步
    3. JavaScript 构建块
    4. 引入 JavaScript 对象
  4. JavaScript 指南
    1. 介绍
    2. 语法和类型
    3. 控制流程和错误处理
    4. 循环和迭代
    5. 函数
    6. 表达式和运算符
    7. 数字和日期
    8. 文本格式
    9. 正则表达式
    10. Indexed collections
    11. Keyed collections
    12. Working with objects
    13. 对象模型的细节
    14. Using promises
    15. 迭代器和生成器
    16. Meta programming
    17. JavaScript 模块
  5. 中间体
    1. Client-side JavaScript frameworks
    2. 客户端侧 Web API
    3. 重新介绍 JavaScript
    4. JavaScript 数据结构
    5. 相等比较和相同
    6. 闭包
  6. 高级
    1. 继承和原型链
    2. 严格模式
    3. JavaScript 类型数组
    4. 内存管理
    5. 并发模型和事件循环
  7. 参考:
  8. 内置对象
    1. AggregateError
    2. Array
    3. ArrayBuffer
    4. AsyncFunction
    5. Atomics
    6. BigInt
    7. BigInt64Array
    8. BigUint64Array
    9. Boolean
    10. DataView
    11. Date
    12. Error
    13. EvalError
    14. FinalizationRegistry
    15. Float32Array
    16. Float64Array
    17. Function
    18. Generator
    19. GeneratorFunction
    20. Infinity
    21. Int16Array
    22. Int32Array
    23. Int8Array
    24. InternalError
    25. Intl
    26. JSON
    27. Map
    28. Math
    29. NaN
    30. Number
    31. Object
    32. Promise
    33. Proxy
    34. RangeError
    35. ReferenceError
    36. Reflect
    37. RegExp
    38. Set
    39. SharedArrayBuffer
    40. String
    41. Symbol
    42. SyntaxError
    43. TypeError
    44. TypedArray
    45. URIError
    46. Uint16Array
    47. Uint32Array
    48. Uint8Array
    49. Uint8ClampedArray
    50. WeakMap
    51. WeakRef
    52. WeakSet
    53. WebAssembly
    54. decodeURI()
    55. decodeURIComponent()
    56. encodeURI()
    57. encodeURIComponent()
    58. escape()
    59. eval()
    60. globalThis
    61. isFinite()
    62. isNaN()
    63. null
    64. parseFloat()
    65. parseInt()
    66. undefined
    67. unescape()
    68. uneval()
  9. 表达式 & 运算符
    1. Addition (+)
    2. Addition assignment (+=)
    3. Assignment (=)
    4. Bitwise AND (&)
    5. Bitwise AND assignment (&=)
    6. Bitwise NOT (~)
    7. Bitwise OR (|)
    8. Bitwise OR assignment (|=)
    9. Bitwise XOR (^)
    10. Bitwise XOR assignment (^=)
    11. Comma operator (,)
    12. 条件 (三元) 运算符
    13. Decrement (--)
    14. Destructuring assignment
    15. Division (/)
    16. Division assignment (/=)
    17. Equality (==)
    18. Exponentiation (**)
    19. Exponentiation assignment (**=)
    20. Function expression
    21. Greater than (>)
    22. Greater than or equal (>=)
    23. Grouping operator ( )
    24. Increment (++)
    25. Inequality (!=)
    26. Left shift (<<)
    27. Left shift assignment (<<=)
    28. Less than (<)
    29. Less than or equal (<=)
    30. Logical AND (&&)
    31. Logical AND assignment (&&=)
    32. Logical NOT (!)
    33. Logical OR (||)
    34. Logical OR assignment (||=)
    35. Logical nullish assignment (??=)
    36. Multiplication (*)
    37. Multiplication assignment (*=)
    38. Nullish coalescing operator (??)
    39. Object initializer
    40. 运算符优先级
    41. Optional chaining (?.)
    42. Pipeline operator (|>)
    43. 特性访问器
    44. Remainder (%)
    45. Remainder assignment (%=)
    46. Right shift (>>)
    47. Right shift assignment (>>=)
    48. Spread syntax (...)
    49. Strict equality (===)
    50. Strict inequality (!==)
    51. Subtraction (-)
    52. Subtraction assignment (-=)
    53. Unary negation (-)
    54. Unary plus (+)
    55. Unsigned right shift (>>>)
    56. Unsigned right shift assignment (>>>=)
    57. 异步函数表达式
    58. await
    59. class expression
    60. delete operator
    61. function* 表达式
    62. in operator
    63. instanceof
    64. new operator
    65. new.target
    66. super
    67. this
    68. typeof
    69. void 运算符
    70. yield
    71. yield*
  10. 语句 & 声明
    1. async function
    2. block
    3. break
    4. class
    5. const
    6. continue
    7. debugger
    8. do...while
    9. empty
    10. export
    11. for
    12. for await...of
    13. for...in
    14. for...of
    15. 函数声明
    16. function*
    17. if...else
    18. import
    19. import.meta
    20. label
    21. let
    22. return
    23. switch
    24. throw
    25. try...catch
    26. var
    27. while
    28. with
  11. 函数
    1. 箭头函数表达式
    2. 默认参数
    3. 方法定义
    4. 其余参数
    5. 自变量对象
    6. getter
    7. setter
    1. Private class fields
    2. Public class fields
    3. 构造函数
    4. extends
    5. static
  12. 错误
    1. Error: Permission denied to access property "x"
    2. InternalError: too much recursion
    3. RangeError: argument is not a valid code point
    4. RangeError: invalid array length
    5. RangeError: invalid date
    6. RangeError: precision is out of range
    7. RangeError: radix must be an integer
    8. RangeError: repeat count must be less than infinity
    9. RangeError: repeat count must be non-negative
    10. ReferenceError: "x" is not defined
    11. ReferenceError: assignment to undeclared variable "x"
    12. ReferenceError: can't access lexical declaration`X' before initialization
    13. ReferenceError: deprecated caller or arguments usage
    14. ReferenceError: invalid assignment left-hand side
    15. ReferenceError: reference to undefined property "x"
    16. SyntaxError: "0"-prefixed octal literals and octal escape seq. are deprecated
    17. SyntaxError: "use strict" not allowed in function with non-simple parameters
    18. SyntaxError: "x" is a reserved identifier
    19. SyntaxError: JSON.parse: bad parsing
    20. SyntaxError: Malformed formal parameter
    21. SyntaxError: Unexpected token
    22. SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
    23. SyntaxError: a declaration in the head of a for-of loop can't have an initializer
    24. SyntaxError: applying the 'delete' operator to an unqualified name is deprecated
    25. SyntaxError: for-in loop head declarations may not have initializers
    26. SyntaxError: function statement requires a name
    27. SyntaxError: identifier starts immediately after numeric literal
    28. SyntaxError: illegal character
    29. SyntaxError: invalid regular expression flag "x"
    30. SyntaxError: missing ) after argument list
    31. SyntaxError: missing ) after condition
    32. SyntaxError: missing : after property id
    33. SyntaxError: missing ; before statement
    34. SyntaxError: missing = in const declaration
    35. SyntaxError: missing ] after element list
    36. SyntaxError: missing formal parameter
    37. SyntaxError: missing name after . operator
    38. SyntaxError: missing variable name
    39. SyntaxError: missing } after function body
    40. SyntaxError: missing } after property list
    41. SyntaxError: redeclaration of formal parameter "x"
    42. SyntaxError: return not in function
    43. SyntaxError: test for equality (==) mistyped as assignment (=)?
    44. SyntaxError: unterminated string literal
    45. TypeError: "x" has no properties
    46. TypeError: "x" is (not) "y"
    47. TypeError: "x" is not a constructor
    48. TypeError: "x" is not a function
    49. TypeError: "x" is not a non-null object
    50. TypeError: "x" is read-only
    51. TypeError: 'x' is not iterable
    52. TypeError: More arguments needed
    53. TypeError: Reduce of empty array with no initial value
    54. TypeError: X.prototype.y called on incompatible type
    55. TypeError: can't access dead object
    56. TypeError: can't access property "x" of "y"
    57. TypeError: can't assign to property "x" on "y": not an object
    58. TypeError: can't define property "x": "obj" is not extensible
    59. TypeError: can't delete non-configurable array element
    60. TypeError: can't redefine non-configurable property "x"
    61. TypeError: cannot use 'in' operator to search for 'x' in 'y'
    62. TypeError: cyclic object value
    63. TypeError: invalid 'instanceof' operand 'x'
    64. TypeError: invalid Array.prototype.sort argument
    65. TypeError: invalid arguments
    66. TypeError: invalid assignment to const "x"
    67. TypeError: property "x" is non-configurable and can't be deleted
    68. TypeError: setting getter-only property "x"
    69. TypeError: variable "x" redeclares argument
    70. URIError: malformed URI sequence
    71. Warning: -file- is being assigned a //# sourceMappingURL, but already has one
    72. Warning: 08/09 is not a legal ECMA-262 octal constant
    73. Warning: Date.prototype.toLocaleFormat is deprecated
    74. Warning: JavaScript 1.6's for-each-in loops are deprecated
    75. Warning: String.x is deprecated; use String.prototype.x instead
    76. Warning: expression closures are deprecated
    77. Warning: unreachable code after return statement
  13. 杂项
    1. JavaScript technologies overview
    2. 词汇语法
    3. JavaScript 数据结构
    4. Enumerability and ownership of properties
    5. Iteration protocols
    6. 严格模式
    7. Transitioning to strict mode
    8. Template literals
    9. 弃用特征