[JS] Behaviour of Array.prototype.join() incompatible with ECMAScript v6.0
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
undefinedornull, 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: