Loops keep their speed when a helper ignores an argument, and JavaScript behaves more like the reference browser
A loop that calls a small helper no longer loses its compiled machine code just because it hands the helper a null, an options object or something else the helper never reads, which made such loops up to 50 times slower. Alongside it, a round of JavaScript behaviour found by checking Floati against the reference browser: class constructors, getters on array items, frozen arrays and the arguments of older-style functions now all behave the way the reference browser does.
Loops stay on compiled code when a helper ignores an argument. Floati compiles a hot loop, and the small functions it calls, into machine code, but only when it can tell what every value in the loop is. A value passed to a helper that never uses it (a null for an optional parameter, an options object the fast path skips) used to stop the whole loop from compiling. Such values are now simply passed along without being looked at: a loop calling a helper with a null went from 156 to 3 milliseconds per million calls.
JavaScript & JIT
Method calls on objects built inside a loop are faster. The safety check that confirms an object's methods have not been swapped out now reads its answer directly instead of asking the engine each time, which made a class-heavy benchmark about 19 percent faster and steadier from build to build.
Rendering
Class constructors work like the reference browser. Calling a class without new now throws the same error the reference browser throws, and a parent class sees which class is actually being built (new.target), which libraries use to set up subclasses. Reflect.construct honours the class you ask it to build, a class written as var K = class {} is named K, and a class can extend null.
JavaScript & JIT
Getters and setters on array items. Object.defineProperty can now put a getter or setter on an array position, as some libraries do for lazily computed lists. Reading the item runs the getter everywhere: in loops, in join, map, slice, spread and JSON. A missing array item also looks up the prototype chain in compiled code, as it always did in the interpreter.
JavaScript & JIT
Frozen and sealed arrays stay frozen. Object.freeze, Object.seal and Object.preventExtensions did nothing to arrays before. Writes, deletes, length changes and methods like push and sort are now refused exactly as the reference browser refuses them, silently in ordinary code and with the reference browser's error in strict code.
Rendering
The arguments of older-style functions stay linked. In a function written without strict mode, changing a parameter now changes arguments[0] and the other way round, as the language defines and older libraries rely on. Only functions that could notice the difference pay for it; the rest keep every speedup.