IE выдает ожидаемую ошибку двоеточия, работает в Chrome? Массив объектов с литералом объекта и функцией

Я пишу функцию, которая берет текст из файла и проверяет текст. Он работает гладко в 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.info("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.info("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.info("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.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
832
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

{
    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 и использовать транспилятор, такой как Вавилон, для преобразования кода в ES5 (возможно, с полифиллами) для IE.

Другие вопросы по теме