Statements and declarations

JavaScript applications consist of statements with an appropriate syntax. A single statement may span multiple lines. Multiple statements may occur on a single line if each statement is separated by a semicolon. This isn't a keyword, but a group of keywords.

Statements and declarations by category

For an alphabetical listing see the sidebar on the left.

Control flow

Block
A block statement is used to group zero or more statements. The block is delimited by a pair of curly brackets.
break
Terminates the current loop, switch, or label statement and transfers program control to the statement following the terminated statement.
continue
Terminates execution of the statements in the current iteration of the current or labeled loop, and continues execution of the loop with the next iteration.
Empty
An empty statement is used to provide no statement, although the JavaScript syntax would expect one.
if...else
Executes a statement if a specified condition is true. If the condition is false, another statement can be executed.
switch
Evaluates an expression, matching the expression's value to a case clause, and executes statements associated with that case.
throw
Throws a user-defined exception.
try...catch
Marks a block of statements to try, and specifies a response, should an exception be thrown.

Declarations

var
Declares a variable, optionally initializing it to a value.
let
Declares a block scope local variable, optionally initializing it to a value.
const
Declares a read-only named constant.

Functions and classes

function
Declares a function with the specified parameters.
function*
Generator Functions enable writing iterators more easily.
async function
Declares an async function with the specified parameters.
return
Specifies the value to be returned by a function.
class
Declares a class.

Iterations

do...while
Creates a loop that executes a specified statement until the test condition evaluates to false. The condition is evaluated after executing the statement, resulting in the specified statement executing at least once.
for
Creates a loop that consists of three optional expressions, enclosed in parentheses and separated by semicolons, followed by a statement executed in the loop.
for each...in 
Iterates a specified variable over all values of object's properties. For each distinct property, a specified statement is executed.
for...in
Iterates over the enumerable properties of an object, in arbitrary order. For each distinct property, statements can be executed.
for...of
Iterates over iterable objects (including arrays, array-like objects, iterators and generators), invoking a custom iteration hook with statements to be executed for the value of each distinct property.
for await...of
Iterates over async iterable objects, array-like objects, iterators and generators, invoking a custom iteration hook with statements to be executed for the value of each distinct property.
while
Creates a loop that executes a specified statement as long as the test condition evaluates to true. The condition is evaluated before executing the statement.

Others

debugger
Invokes any available debugging functionality. If no debugging functionality is available, this statement has no effect.
export
Used to export functions to make them available for imports in external modules, and other scripts.
import
Used to import functions exported from an external module, another script.
import.meta
A meta-property exposing context-specific metadata to a JavaScript module.
label
Provides a statement with an identifier that you can refer to using a break or continue statement.
with 
Extends the scope chain for a statement.

Specifications

Specification
ECMAScript Latest Draft (ECMA-262)
The definition of 'ECMAScript Language: Statements and Declarations' in that specification.

Browser compatibility

The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
Legacy generator function
DeprecatedNon-standard
Chrome No support NoEdge No support NoFirefox No support 2 — 58IE No support NoOpera No support NoSafari No support NoWebView Android No support NoChrome Android No support NoFirefox Android No support 4 — 58Opera Android No support NoSafari iOS No support NoSamsung Internet Android No support Nonodejs No support No
async functionChrome Full support 55Edge Full support 15Firefox Full support 52IE No support NoOpera Full support 42Safari Full support 10.1WebView Android Full support 55Chrome Android Full support 55Firefox Android Full support 52Opera Android Full support 42Safari iOS Full support 10.3Samsung Internet Android Full support 6.0
blockChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 11Opera Full support YesSafari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
breakChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
classEdge Full support 13Firefox Full support 45IE No support NoOpera Full support 36Safari Full support 10.1Firefox Android Full support 45Opera Android ? Safari iOS Full support 10.3nodejs Full support 6.0.0
constChrome Full support 21Edge Full support 12IE Full support 11Opera Full support YesSafari Full support 5.1WebView Android Full support ≤37Chrome Android Full support 25Opera Android Full support YesSafari iOS Full support 6Samsung Internet Android Full support Yesnodejs Full support Yes
continueChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
debuggerChrome Full support 5Edge Full support 12Firefox Full support 1IE Full support 4Opera Full support YesSafari Full support 5WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 4.2Samsung Internet Android Full support 1.0nodejs Full support Yes
do...whileChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 4Opera Full support YesSafari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
Empty statement (;)Chrome Full support 3Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support 5WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 4.2Samsung Internet Android Full support 1.0nodejs Full support Yes
exportChrome Full support 61IE No support NoOpera Full support 47Safari Full support 10.1WebView Android No support NoChrome Android Full support 61Opera Android Full support 44Safari iOS Full support 10.3Samsung Internet Android Full support 8.0
forChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
for await...ofChrome Full support 63Edge No support NoFirefox Full support 57IE No support NoOpera Full support 50Safari Full support 11WebView Android Full support 63Chrome Android Full support 63Firefox Android Full support 57Opera Android Full support 46Safari iOS Full support 11Samsung Internet Android Full support 8.0
for each...in
DeprecatedNon-standard
Chrome No support NoEdge No support NoFirefox No support 1.5 — 57IE No support NoOpera No support NoSafari No support NoWebView Android No support NoChrome Android No support NoFirefox Android No support 4 — 57Opera Android No support NoSafari iOS No support NoSamsung Internet Android No support Nonodejs No support No
for...inChrome Full support 49Edge Full support 12Firefox Full support 1IE Full support 6Opera Full support 36Safari Full support 7WebView Android Full support 49Chrome Android Full support 49Firefox Android Full support 4Opera Android Full support 36Safari iOS Full support 7Samsung Internet Android Full support 5.0nodejs Full support Yes
for...ofChrome Full support 38Edge Full support 12IE No support NoOpera Full support 25Safari Full support 7WebView Android Full support 38Chrome Android Full support 38Opera Android Full support 25Safari iOS Full support 7Samsung Internet Android Full support Yesnodejs Full support Yes
functionChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
function*Chrome Full support 39Edge Full support 13Firefox Full support 26IE No support NoOpera Full support 26Safari Full support 10WebView Android Full support 39Chrome Android Full support 39Firefox Android Full support 26Opera Android Full support YesSafari iOS Full support 10Samsung Internet Android Full support 4.0
if...elseChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
importChrome Full support 61IE No support NoOpera Full support 47Safari Full support 10.1WebView Android Full support 61Chrome Android Full support 61Opera Android Full support 44Safari iOS Full support 10.3Samsung Internet Android Full support 8.0
import.metaChrome Full support 64Edge No support NoFirefox Full support 62IE No support NoOpera Full support 51Safari Full support 11.1WebView Android Full support 64Chrome Android Full support 64Firefox Android Full support 62Opera Android Full support 47Safari iOS Full support 12Samsung Internet Android Full support 9.0nodejs ?
labelChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 4Opera Full support YesSafari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
letOpera Full support 17Safari Full support 10Opera Android Full support 18Safari iOS Full support 10nodejs Full support 6.0.0
returnChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
switchChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 4Opera Full support YesSafari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
throwChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 5Opera Full support YesSafari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
try...catchChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 5Opera Full support YesSafari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
varChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
whileChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
with
Deprecated
Chrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes

Thank you!

Report sent

What happens next?

Our team will review your report. Once we verify the information you have supplied we will update this browser compatability table accordingly.

Can I keep track of my report?

You can join the GitHub repository to see updates and commits for this table data:

Tell us what’s wrong with this table

Our goal is to provide accurate, real values for all our compatibility data tables. Notifying MDN of inaccurate data or supplying new data pushes us further towards our goal of providing 100% real values to the developer community.
Thank you for helping.

Legend

Full support  
Full support
Partial support  
Partial support
No support  
No support
Compatibility unknown  
Compatibility unknown
Non-standard. Expect poor cross-browser support.
Non-standard. Expect poor cross-browser support.
Deprecated. Not for use in new websites.
Deprecated. Not for use in new websites.
See implementation notes.
See implementation notes.
User must explicitly enable this feature.
User must explicitly enable this feature.

See also

Metadata

Related Topics
  1. JavaScript
  2. Tutorials:
  3. ▶︎Complete beginners
    1. JavaScript basics
    2. JavaScript first steps
    3. JavaScript building blocks
    4. Introducing JavaScript objects
  4. ▶︎JavaScript Guide
    1. Introduction
    2. Grammar and types
    3. Control flow and error handling
    4. Loops and iteration
    5. Functions
    6. Expressions and operators
    7. Numbers and dates
    8. Text formatting
    9. Regular expressions
    10. Indexed collections
    11. Keyed collections
    12. Working with objects
    13. Details of the object model
    14. Using promises
    15. Iterators and generators
    16. Meta programming
    17. JavaScript modules
  5. ▶︎Intermediate
    1. Introducing JavaScript objects
    2. Client-side web APIs
    3. A re-introduction to JavaScript
    4. JavaScript data structures
    5. Equality comparisons and sameness
    6. Closures
  6. ▶︎Advanced
    1. Inheritance and the prototype chain
    2. Strict mode
    3. JavaScript typed arrays
    4. Memory Management
    5. Concurrency model and Event Loop
  7. References:
  8. ▶︎Built-in objects
    1. AggregateError
    2. Array
    3. ArrayBuffer
    4. AsyncFunction
    5. AsyncIterator
    6. Atomics
    7. BigInt
    8. BigInt64Array
    9. BigUint64Array
    10. Boolean
    11. DataView
    12. Date
    13. Error
    14. EvalError
    15. Float32Array
    16. Float64Array
    17. Function
    18. Generator
    19. GeneratorFunction
    20. Infinity
    21. Int16Array
    22. Int32Array
    23. Int8Array
    24. InternalError
    25. Intl
    26. Intl.Collator
    27. Intl.DateTimeFormat
    28. Intl.DisplayNames
    29. Intl.ListFormat
    30. Intl.Locale
    31. Intl.NumberFormat
    32. Intl.PluralRules
    33. Intl.RelativeTimeFormat
    34. Iterator
    35. JSON
    36. Map
    37. Math
    38. NaN
    39. Number
    40. Object
    41. Promise
    42. Proxy
    43. RangeError
    44. ReferenceError
    45. Reflect
    46. RegExp
    47. Set
    48. SharedArrayBuffer
    49. String
    50. Symbol
    51. SyntaxError
    52. TypeError
    53. TypedArray
    54. URIError
    55. Uint16Array
    56. Uint32Array
    57. Uint8Array
    58. Uint8ClampedArray
    59. WeakMap
    60. WeakSet
    61. WebAssembly
    62. decodeURI()
    63. decodeURIComponent()
    64. encodeURI()
    65. encodeURIComponent()
    66. escape()
    67. eval()
    68. globalThis
    69. isFinite()
    70. isNaN()
    71. null
    72. parseFloat()
    73. parseInt()
    74. undefined
    75. unescape()
    76. uneval()
  9. ▶︎Expressions & operators
    1. Arithmetic operators
    2. Array comprehensions
    3. Assignment operators
    4. Bitwise operators
    5. Comma operator
    6. Comparison operators
    7. Conditional (ternary) operator
    8. Destructuring assignment
    9. Expression closures
    10. Function expression
    11. Generator comprehensions
    12. Grouping operator
    13. Legacy generator function expression
    14. Logical operators
    15. Nullish coalescing operator
    16. Object initializer
    17. Operator precedence
    18. Optional chaining
    19. Pipeline operator
    20. Property accessors
    21. Spread syntax
    22. async function expression
    23. await
    24. class expression
    25. delete operator
    26. function* expression
    27. in operator
    28. instanceof
    29. new operator
    30. new.target
    31. super
    32. this
    33. typeof
    34. void operator
    35. yield
    36. yield*
  10. ▼︎Statements & declarations
    1. Legacy generator function
    2. async function
    3. block
    4. break
    5. class
    6. const
    7. continue
    8. debugger
    9. default
    10. do...while
    11. empty
    12. export
    13. for
    14. for await...of
    15. for each...in
    16. for...in
    17. for...of
    18. function declaration
    19. function*
    20. if...else
    21. import
    22. import.meta
    23. label
    24. let
    25. return
    26. switch
    27. throw
    28. try...catch
    29. var
    30. while
    31. with
  11. ▶︎Functions
    1. Arrow function expressions
    2. Default parameters
    3. Method definitions
    4. Rest parameters
    5. The arguments object
    6. getter
    7. setter
  12. ▶︎Classes
    1. Class fields
    2. constructor
    3. extends
    4. static
  13. ▶︎Errors
    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
  14. ▶︎Misc
    1. JavaScript technologies overview
    2. Lexical grammar
    3. JavaScript data structures
    4. Enumerability and ownership of properties
    5. Iteration protocols
    6. Strict mode
    7. Transitioning to strict mode
    8. Template literals
    9. Deprecated features
  15. ▶︎New in JavaScript
    1. ECMAScript 2015 support in Mozilla
    2. ECMAScript 5 support in Mozilla
    3. New in JavaScript 1.1
    4. New in JavaScript 1.2
    5. New in JavaScript 1.3
    6. New in JavaScript 1.4
    7. New in JavaScript 1.5
    8. New in JavaScript 1.6
    9. New in JavaScript 1.7
    10. New in JavaScript 1.8
    11. New in JavaScript 1.8.1
    12. New in JavaScript 1.8.5
  16. Documentation:
  17. ▶︎Useful lists
    1. All pages index
    2. Methods index
    3. Properties index
    4. Pages tagged "JavaScript"
  18. ▶︎Contribute
    1. JavaScript doc status
    2. The MDN project