IE会引发预期的冒号错误,适用于Chrome吗?具有对象文字和函数的对象数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.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部分中我需要它的函数。

答案

你正在使用method syntax

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

这是在ES2015中添加的。 IE11不支持它(没有IE版本),但是现代浏览器都支持它。 (我不认为IE11能够正确支持任何ES2015,因为它在2013年发布,微软没有为IE的现有版本添加功能。它有let,但for循环中的语义错误。)

如您所见,答案是使用属性初始值设定项:

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

或者当然,编写现代javascript并使用Babel等转换器将代码转换为IE的ES5(可能还有polyfill)。

以上是关于IE会引发预期的冒号错误,适用于Chrome吗?具有对象文字和函数的对象数组的主要内容,如果未能解决你的问题,请参考以下文章

CSS 适用于 FF 和 IE,但不适用于 Chrome

仅适用于 IE 用户的 SSL 证书错误

样式适用于 Firefox 和 IE8,但不适用于 Chrome(居中与 text-align=left)

Angular 6 MatSnackBar 适用于 Chrome 但不适用于 IE11

prepend/append 适用于 Chrome 和 Firefox,但不适用于 IE11 和 Edge

jCrop API 在 IE 中为 null 或不是对象,但适用于 FF、Chrome 等