aws/aws-appsync-community

[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 or null, 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:
Screenshot 2023-11-12 at 2 09 28