Expressions & Operators
JavaScript expressions and operators.
Arithmetic
+- Addition
const newNumber = 1 + 1; // 2
const newString = '1' + '1'; // '11'
-- Subtraction
const newNumber = 1 - 1; // 0
const newString = '1' - '1'; // 0 - number-like strings are 'coerced' into numbers
const newString = '1' - 'one'; // NaN (or 'Not-a-Number')
/- Division
const newNumber = 1 / 2; // 0.5
const newString = '1' / '2'; // 0.5
const newString = '1' / 'two'; // NaN
*- Multiplication
const newNumber = 1 * 2; // 2
const newString = '1' * '2'; // 2
const newString = '1' * 'two'; // NaN
%- Remainder (Modulo)
const newNumber = 2.3 % 1; // 0.3
const newString = '2.3' % '1'; // 0.3
const newString = '2.3' % 'one'; // NaN
**- Exponentiation
const newNumber = 2**3; // 8
const newString = '2'**'3'; // 8
const newString = '2'**'three'; // NaN
Relational
in- Object contains property (looking at keys only)
const hasSomething = ('something' in {something: 1, another: 2}); // true
const hasElephant = ('something' in {something: 1, another: 2}); // false
const hasOne = (1 in {something: 1, another: 2}); // false
<- Less-than
const isSmall = (1 < 2); // true
const notSmall = (1 < 1); // false
const notSmall = (1 < 0); // false
<=- Less-than-or-equal-to
const isSmall = (1 <= 2); // true
const notSmall = (1 <= 1); // true
const notSmall = (1 <= 0); // false
>- Greater-than
const isSmall = (1 > 2); // false
const notSmall = (1 > 1); // false
const notSmall = (1 > 0); // true
>=- Greater-than-or-equal-to
const isSmall = (1 >= 2); // false
const notSmall = (1 >= 1); // true
const notSmall = (1 >= 0); // true
Equality
==- Equality (allowing coercion)
const notEqual = (1 == 2); // false
const equalNumbers = (1 == 1); // true
const similarString = (1 == '1'); // true
const similarBool = (1 == true); // true
!=- Inequality (allowing coercion)
const notEqual = (1 != 2); // true
const equalNumbers = (1 != 1); // false
const similarString = (1 != '1'); // false
const similarBool = (1 != true); // false
===- Identity (disallowing coercion)
const notEqual = (1 === 2); // false
const equalNumbers = (1 === 1); // true
const similarString = (1 === '1'); // false
const similarBool = (1 === true); // false
!==- Nonidentity (disallowing coercion)
const notEqual = (1 !== 2); // true
const equalNumbers = (1 !== 1); // false
const similarString = (1 !== '1'); // true
const similarBool = (1 !== true); // true
Logical
&&- Logical AND
const allTrue = (true && true); // true
const someFalse = (false && true); // false
const allFalse = (false && false); // false
||- Logical OR (also a falsy-coalescing operator)
const allTrue = (true || true); // true
const someFalse = (false || true); // true
const allFalse = (false || false); // false
// Falsy-Coalescing is used to return the first non-falsy value
const firstIsGood = ('first' || 'second'); // 'first'
const firstIsUndefined = (undefined || 'second'); // 'second'
const firstIsNull = (null || 'second'); // 'second'
const firstIsFalse = (false || 'second'); // 'second'
const firstIs0 = (0 || 'second'); // 'second'
Assignment
=- Assignment
const a = 1; // 1
const b = a; // 1
*=- Multiplication assignment
const a = 2; // 2
const a *= 2; // 4 (a = a * 2)
/=- Division assignment
const a = 2; // 2
const a /= 2; // 1 (a = a / 2)
+=- Addition assignment
const a = 2; // 2
const a += 2; // 4 (a = a + 2)
-=- Subtraction assignment
const a = 2; // 2
const a -= 2; // 0 (a = a - 2)
[a, b] = [1, 2],{a, b} = {a: 1, b: 2}- Destructuring assignment
const anArray = [1, 2];
const anObject = {aKey: 1, bKey: 2};
const [first, second] = anArray; // first = 1, second = 2
const {aKey} = anObject; // aKey = 1
,- Evaluate multiple, return last
const result = (x = 1, x += 2, x /= 4, x); // 0.75
Miscellaneous
(condition ? ifTrue : ifFalse)- ternary operator
const getFirst = (1 >= 0) ? 'first' : 'second'; // 'first'
const getSecond = (1 >= 2) ? 'first' : 'second'; // 'second'
?.- optional chaining operator
const something = {
nullChild: null;
};
// Note: (`something.child` is `undefined`)
const undefinedChainOkay = something.child?.grandchild; // returns `undefined`
const undefinedChainError = something.child.grandchild; // throws error (trying to access `grandchild` of `undefined`)
const nullChainOkay = something.nullChild?.grandchild; // returns `undefined`
const nullChainError = something.nullChild.grandchild; // throws error (trying to access `grandchild` of `null`)
Last modified December 3, 2020: AWSC-4 Added Digital Twin docs Added basic Wrting Formulas docs (2ff38ec)