[JS] Behaviour of Array.prototype.join() incompatible with ECMAScript v6.0
patrik-simunic-cz opened this issue · 0 comments
Issue description
The implementation of method Array.prototype.join()
diverts from the official ECMAScript (ES) version 6.0 documentation. ECMAScript treats undefined
and null
elements as empty strings, while this custom proprietary runtime first converts them to null
, then converts null
to string and only then treats these double converted strings as elements:
// ECMAScript v6.0
var officialA = ["foo", undefined].join("/"); // -> "foo/"
var officialB = ["foo", null].join("/"); // -> "foo/"
// AppSync
var customA = ["foo", undefined].join("/"); // -> "foo/null"
var customB = ["foo", null].join("/"); // -> "foo/null"
Read the relevant section here - https://262.ecma-international.org/6.0/#sec-array.prototype.join
- under the procedure step 13.c
you'll find stated:
If element is
undefined
ornull
, let next be the empty String; otherwise, let next be ToString(element).
Bug reproduction
See the reproducible bug demo here: https://github.com/testuj-to/appsync-esv6-incompatible-join
In the demo, 2 strings are expected to be returned ("foo/"
and "foo/"
), instead this is the output: