IE выдает ожидаемую ошибку двоеточия, работает в Chrome?Массив объектов с литералом объекта и функцией - PullRequest
1 голос
/ 09 апреля 2019

Я пишу функцию, которая берет текст из файла и проверяет текст.На Chrome он работает без сбоев, но не с IE?Из того, что я могу найти в Интернете, IE должен поддерживать все, с чем я работаю.Когда я запускаю его в IE, в конце каждого test(data)

появляется текущий код «Ожидаемый»: «Текущий код:

    function testText(callback)
    {
        const filePaths =
        [
            {
                url: "http://example.com/example.txt",
                test(data)
                {
                    const compareText = data.localeCompare(trigger, "en", {sensitivity: "base"});

                    if (compareText == 0)
                    {
                        globalNotifEnabled = true;
                        return true;
                    }
                    return false;
                }

            },
            {
                url: "http://www.example.com/UserExceptions.txt",
                test(data)
                {
                    const rawUsers = data;
                    const userExceptions = rawUsers.split(';');

                    if (userExceptions.indexOf(currentUser) > -1)
                    {
                        console.log("User exception is: " + userExceptions[userExceptions.indexOf(currentUser)]);
                        return false;
                    }
                    return true;
                }
            },
            {
                url: "http://www.example.com/test/notification.txt",
                test(data)
                {
                    globalNotification = data;
                    notify(globalNotification);
                    console.log("Global notification displayed.");
                    return true;
                }
            }
        ];

        (function getFiles(currentStage)
        {
            $.get(filePaths[currentStage].url, function(data)
            {
                if (filePaths[currentStage].test(data))
                {
                    if (filePaths.length > currentStage + 1) getFiles(currentStage + 1)
                        else callback(null, "Success!")
                }
                else callback(Error(`Stage ${currentStage}'s test failed.`, null))  
            }, 'text')
            .fail(function()
            {
                console.log("Global notifications failed at stage: " + currentStage);
            });
        })(0);
    }

Существует ли причина, по которой Chrome позволяетмне получить доступ к test(data), но IE требует, чтобы у меня было что-то вроде blah: function test(data)?Я попытался изменить объекты так, чтобы они выглядели так:

                url: "http://example.com/example.txt",
                setTest: function(test(data))
                {
                    const compareText = data.localeCompare(trigger, "en", {sensitivity: "base"});

                    if (compareText == 0)
                    {
                        globalNotifEnabled = true;
                        return true;
                    }
                    return false;
                }

... и вызвать его в функции getFiles, например:

if (filePaths[currentStage].setTest)
...

Это не вызывает ошибок вIE, но на самом деле она не использует функцию, как мне нужно в части getFiles.

1 Ответ

1 голос
/ 09 апреля 2019

Вы используете синтаксис метода :

{
    url: "http://example.com/example.txt",
    test(data) // <==== here
    {
        // ...
    }
}

Это было добавлено в ES2015.IE11 не поддерживает его (ни одна версия IE не поддерживает), но современные браузеры поддерживают.(Я не думаю, что IE11 должным образом поддерживает ES2015, так как он был выпущен в 2013 году, и Microsoft не добавляет функции в существующие версии IE. У него let, но семантика неверна в циклах for.)

Как вы уже нашли, ответ заключается в том, чтобы вместо этого использовать инициализатор свойства:

{
    url: "http://example.com/example.txt",
    test: function(data)
// -----^^^^^^^^^^
    {
        // ...
    }
}

Или, конечно, написать современный JavaScript и использовать транспортер, такой как Babel преобразовать код в ES5 (возможно, с полифилами) для IE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...