IE抛出预期的冒号错误,可以在Chrome中使用吗?具有对象文字和功能的对象数组

时间:2019-04-09 16:05:16

标签: javascript internet-explorer

我正在编写一个从文件中获取文本并测试文本的函数。它可以在Chrome上顺利运行,但不能在IE上运行?从网上可以找到的信息中,IE应该支持我正在使用的所有内容。当我在IE上运行它时,它在每个test(data)

的结尾处引发“ Expected':'”错误

当前代码:

    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 个答案:

答案 0 :(得分:1)

您正在使用method syntax

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

这已在ES2015中添加。 IE11不支持(没有IE版本),但是现代浏览器支持。 (我认为IE11不正确支持ES2015的任何版本,因为它于2013年发布,并且Microsoft并未在IE的现有版本中添加功能。它具有let,但是{{1}中的语义是错误的}循环。)

正如您所发现的,答案是使用属性初始化程序:

for

或者,当然,编写现代JavaScript并使用Babel之类的编译器将IE的代码转换为ES5(也许使用polyfills)。