2

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

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

改成之后mediamedia_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 火狐:

simple string
simple string

安卓火狐:

simple string
simple string

Android 2.3.7 原生浏览器:

[ object Media ]
simple string

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

我用谷歌搜索是否可以找到有关此的任何信息,但我没有。(主要是因为媒体是一个如此广泛使用的词)。

所以,我的问题:

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

4

1 回答 1

2

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

当您尝试访问某个变量(例如media)时,JavaScript 将查找作用域链,尝试为它找到一个声明。如果找不到,它将尝试在全局对象上创建一个属性。

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

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

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

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

于 2013-05-25T17:24:23.263 回答