我很难调试在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
是保留关键字吗?
答案 0 :(得分:2)
你误诊了你的问题。你实际看到的是全局对象的媒体属性。
当您尝试访问某个变量(例如media
)时,JavaScript会查找范围链,尝试为其查找声明。如果找不到,则尝试在全局对象上创建属性。
但是,不保证这样的属性是可写的。显然,在您的情况下,全局对象的media
属性不是。
你应该做的是声明你的变量:
var media = 'simple string';
var othervar = 'simple string';
如果media是保留关键字,则会出现语法错误。保留的关键字不能用作标识符(例如变量名,函数名和其他一些东西)。