SupportedLocales = function (isAvailableLocale, requestedLocales, options) {
        const matcher = options === undefined
            ? "best fit"
            : GetOption(Internal.ToObject(options), "localeMatcher", "string", ["best fit", "lookup"], "best fit");
        const supportedLocales = matcher === "best fit"
            ? BestFitSupportedLocales(isAvailableLocale, requestedLocales)
            : LookupSupportedLocales(isAvailableLocale, requestedLocales);

        for (let i = 0; i < supportedLocales.length; i++) {
            _.defineProperty(supportedLocales, Internal.ToString(i), { configurable: false, writable: false });
        }

        // test262 supportedLocalesOf-returned-array-elements-are-frozen.js:
        // Property length of object returned by SupportedLocales should not be writable
        _.defineProperty(supportedLocales, "length", {
            writable: false,
            configurable: false,
            enumerable: false,
        });

        return supportedLocales;
    }
Returns the subset of requestedLocales that has a matching locale, according to
options.localeMatcher and isAvailableLocale.

ECMA402: #sec-supportedlocales

@param {Function} isAvailableLocale A function that takes a locale and returns if the locale is supported
@param {String|String[]} requestedLocales
@param {Object} options