Step 3 / Select topic JavaScript Hard
What this bank covers
- An object return replaces the new instance
- A primitive return keeps the instance
- Field initializers run before the constructor body
- A later field can read an earlier field
- An earlier field reads a later field as undefined
- Derived fields initialize when super returns
- Static fields run during class evaluation
- The base class finishes before the subclass body
- A class constructor requires new
- new.target is the constructed subclass
- extends is evaluated before the class body
- extends null has no prototype parent
- Class methods are non-enumerable
- Symbol.hasInstance customizes instanceof
- bind reduces length by the bound arguments
- A bound function has no prototype property
- new Function does not close over locals
- new Function is sloppy unless the source is strict
- Strict arguments do not alias parameters
- Sloppy arguments alias the named parameter
- call(null) is not rewritten in strict mode
- Strict direct eval does not leak var
- A body let cannot reuse a parameter name
- A default cannot read a later parameter
- yield* yields values, then returns the inner result
- throw injects an exception at the paused yield
- return completes the generator and runs finally
- An async return adopts a thenable
- The promise executor runs synchronously
- A second resolve is ignored
- Promise.resolve returns a native promise unchanged
- Promise.resolve adopts a thenable
- A throwing then rejects the adopting promise
- A microtask queued inside then runs after queued jobs
- JSON.stringify writes -0 as 0
- JSON.stringify rejects bigint
- JSON.stringify rejects a cycle
- toJSON replaces the object being serialized
- A reviver sees children before the parent
- structuredClone preserves a cycle
- structuredClone keeps a Map as a Map
- A false set trap throws in strict mode
- A false deleteProperty trap throws in strict mode
- A get trap must honor a frozen data property
- Strict assignment to a non-writable property throws
- Strict assignment to a frozen object throws
- Strict delete on a sealed object throws
- Strict assignment cannot extend a non-extensible object
- Date addition concatenates and subtraction subtracts
- Ordinary ToPrimitive swaps order by hint
- Symbol.toStringTag sets the Object toString tag
- Unsigned right shift turns -1 into the uint32 max
- Bitwise OR truncates toward zero through int32
- Both sums collapse to the same float
- Dividing by negative zero yields -Infinity
- Math.round breaks ties toward +Infinity
- Array sort is stable
- Map treats +0 and -0 as one key
- with returns a new array
- findLast returns the last match
- reduce skips holes
- copyWithin copies from a snapshot of the overlap
- A typed array is not an Array
- Only a literal __proto__ key sets the prototype
- BigInt and Number cannot be mixed with +
- bigint has its own typeof and is not === to a number
- BigInt division truncates toward zero
- Unary plus cannot convert a symbol
- String concatenation rejects a symbol, String() does not
- A returned object does not receive the public fields
- Optional call skips the argument list
- Nullish assignment ignores 0
- Logical or assignment keeps a truthy left side
- The comma operator yields the right operand
- A bare arrow has no super binding
- A sticky regexp anchors at lastIndex
- Without u or v, \p is an identity escape
- A tagged illegal escape cooks to undefined
- toString tags null as Null
- Strict mode hides arguments.callee
- Indirect eval does not bind locals
- super reaches a base static method
- Symbol.species chooses the map constructor
- A module namespace object is not extensible
- Dynamic import fulfills with the namespace
- A finally throw replaces the pending exception
- Private names are branded per class
- A static block sees an earlier private static field
- Error cause is a separate property
- AggregateError keeps an errors array
- for await...of walks an async iterable in order
- An async generator stays paused at yield
- matchAll requires a global regexp
- Named groups live on match.groups
- toSpliced copies instead of mutating
- toReversed copies instead of mutating
- JSON.stringify skips symbol keys
- The get trap receiver is the proxy
- A has trap cannot hide a non-configurable property
- Public instance fields are enumerable
- Spread arguments are limited by the stack
- return await inside try/catch
- Run independent awaits concurrently
- Catastrophic backtracking