Back to Angular

Expression Syntax

adev/src/content/guide/templates/expression-syntax.md

22.0.0-next.107.4 KB
Original Source

Expression Syntax

Angular expressions are based on JavaScript, but differ in some key ways. This guide walks through the similarities and differences between Angular expressions and standard JavaScript.

Value literals

Angular supports a subset of literal values from JavaScript.

Supported value literals

Literal typeExample values
String'Hello', "World"
Booleantrue, false
Number123, 3.14
Object{name: 'Alice'}
Array['Onion', 'Cheese', 'Garlic']
nullnull
RegExp/\d+/
Template string`Hello ${name}`
Tagged template stringtag`Hello ${name}`

Unsupported value literals

Literal typeExample values
BigInt1n

Globals

Angular expressions support the following globals:

No other JavaScript globals are supported. Common JavaScript globals include Number, Boolean, NaN, Infinity, parseInt, and more.

Local variables

Angular automatically makes special local variables available for use in expressions in specific contexts. These special variables always start with the dollar sign character ($).

For example, @for blocks make several local variables corresponding to information about the loop, such as $index.

What operators are supported?

Supported operators

Angular supports the following operators from standard JavaScript.

OperatorExample(s)
Add / Concatenate1 + 2
Subtract52 - 3
Multiply41 * 6
Divide20 / 4
Remainder (Modulo)17 % 5
Exponentiation10 ** 3
Parenthesis9 * (8 + 4)
Conditional (Ternary)a > b ? true : false
And (Logical)&&
Or (Logical)||
Not (Logical)!
Nullish CoalescingpossiblyNullValue ?? 'default'
Comparison Operators<, <=, >, >=, ==, ===, !==, !=
Unary Negation-x
Unary Plus+y
Property Accessorperson['name']
typeoftypeof 42
voidvoid 1
in'model' in car
instanceofcar instanceof Automobile
Assignmenta = b
Addition Assignmenta += b
Subtraction Assignmenta -= b
Multiplication Assignmenta *= b
Division Assignmenta /= b
Remainder Assignmenta %= b
Exponentiation Assignmenta **= b
Logical AND Assignmenta &&= b
Logical OR Assignmenta ||= b
Nullish Coalescing Assignmenta ??= b
Spread in object literals{...obj, foo: 'bar'}
Spread in array literals[...arr, 1, 2, 3]
Rest in function callsfn(...args)

Angular expressions additionally also support the following non-standard operators:

OperatorExample(s)
Pipe{{ total | currency }}
Optional chaining*someObj.someProp?.nestedProp
Non-null assertion (TypeScript)someObj!.someProp

NOTE: Optional chaining behaves differently from the standard JavaScript version in that if the left side of Angular’s optional chaining operator is null or undefined, it returns null instead of undefined.

Unsupported operators

OperatorExample(s)
All bitwise operators&, &=, ~, |=, ^=, etc.
Object destructuringconst { name } = person
Array destructuringconst [firstItem] = items
Comma operatorx = (x++, x)
newnew Car()

Lexical context for expressions

Angular expressions are evaluated within the context of the component class as well as any relevant template variables, locals, and globals.

When referring to component class members, this is always implied. However, if a template declares a template variables with the same name as a member, the variable shadows that member. You can unambiguously reference such a class member by explicitly using this.. This can be useful when creating an @let declaration that shadows a class member, e.g. for signal narrowing purposes.

Declarations

Generally speaking, declarations are not supported in Angular expressions. This includes, but is not limited to:

DeclarationsExample(s)
Variableslet label = 'abc', const item = 'apple'
Functionsfunction myCustomFunction() { }
Arrow Functions() => { }
Classesclass Rectangle { }

Event listener statements

Event handlers are statements rather than expressions. While they support all of the same syntax as Angular expressions, there are two key differences:

  1. Statements do support assignment operators (but not destructing assignments)
  2. Statements do not support pipes