'media'是Android浏览器javascript中的保留关键字吗?

时间:2013-05-25 16:42:44

标签: javascript android

我很难调试在Firefox和Chromium中运行良好的javascript,但在Android浏览器中没有。

最后,我意识到问题的发生是因为我使用了一个名为media的变量(average的葡萄牙语单词。)

media更改为media_calculada后,问题就消失了。

查看此示例:

<!DOCTYPE html>
<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
        <script type="text/javascript">
            function debug(msg) {
                $('#debug').val($('#debug').val() + '\n' + msg);
            }
            $(document).ready(function(){
                media = 'simple string';
                othervar = 'simple string';
                debug(media);
                debug(othervar);
            });
        </script>
    </head>
<body>
<textarea id="debug"></textarea>
</body>
</html>

该示例页面为每个浏览器生成以下输出:

Ubuntu Firefox:

simple string
simple string

Android Firefox:

simple string
simple string

Android 2.3.7原生浏览器:

[ object Media ]
simple string

您可以清楚地看到问题只发生在Android原生浏览器中。

我用谷歌搜索,看看能不能找到相关信息,但我没有。 (主要是因为媒体是一个广泛使用的词)。

所以,我的问题:

Android浏览器中media是保留关键字吗?

1 个答案:

答案 0 :(得分:2)

你误诊了你的问题。你实际看到的是全局对象的媒体属性。

当您尝试访问某个变量(例如media)时,JavaScript会查找范围链,尝试为其查找声明。如果找不到,则尝试在全局对象上创建属性。

但是,不保证这样的属性是可写的。显然,在您的情况下,全局对象的media属性不是。

你应该做的是声明你的变量:

var media = 'simple string';
var othervar = 'simple string';

如果media是保留关键字,则会出现语法错误。保留的关键字不能用作标识符(例如变量名,函数名和其他一些东西)。