[英]Javascript hasOwnProperty does not work under Google Chrome
我目前正在一个项目的帮助下进行,并且进展顺利,直到发生此事件。
function runCommand(commandString)
{
commands = new Object();
commands.clear = function(){ $('#terminal').html('') }
parameters = commandString.split(" ");
command = parameters.shift();
if( commands.hasOwnProperty(command)){
commands[command](parameters);
}
else
{
$('#terminal').append(command+' command not recognized.'+'<br>');
}
}
帮助我的人完成了此功能,因此我可以运行需要使用的“终端式”浏览器。
使用Firefox时效果很好,下面是一个示例:
guest@shell:/$ sudo make me sandwich
sudo command not recognized.
guest@shell:/$ clear
*clears*
guest@shell:/$ clear
但是在谷歌浏览器下会发生这种情况:
guest@shell:/$ sudo make me sandwich
sudo command not recognized.
guest@shell:/$ clear
clear command not recognized.
我认为它与“ commands.hasOwnProperty(command)”有关,导致它无法正常工作。
我正在使用JQuery的JavaScript库来构建网站,并且我需要知道如何解决此问题或替代方法。
我非常怀疑Chrome的hasOwnProperty是否存在任何问题,但是无论哪种情况,我都清理了您的代码并将hasOwnProperty检查更改为typeof检查,该检查也应该更加健壮:
var runCommand = (function () {
var terminal = $('#terminal');
var commands = {
clear: function () {
terminal.html('');
}
};
return function (commandString) {
var parameters = commandString.split(" ");
var command = parameters.shift();
if (typeof commands[command] === "function") {
commands[command](parameters);
} else {
terminal.append(command + ' command not recognized.<br />');
}
};
}());
...如果您好奇的话,我会将命令对象存储在一个闭包中,这样,它只需创建一次即可,而不是每次运行该函数时都会创建/销毁它。 显然,这大大加快了速度。
另外,我只对#terminal元素进行一次搜索,然后将其存储在变量中并使用它。 这也是为了提高性能,因为运行jQuery搜索比存储结果并重复使用它要昂贵得多。
在Chrome 3.0.195.38中为我工作。
我从未听说过Chrome中hasOwnProperty
有任何问题。 我怀疑您的问题出在其他地方。 完整的测试用例? 您如何阅读其中的命令? 您是否可能在Chrome中使用领先的空格获取命令?
您应该记得将函数( commands
, parameters
等)中的局部变量声明为var
,否则会出现意外的全局变量,这可能会产生奇数且难以调试的错误,尽管我怀疑这是问题所在。
我敢打赌,问题在于Firefox和Chrome之间“拆分”的工作方式存在差异。我将尝试更改获取参数和命令的方式:
var command = commandString, parameters = [];
if (/ /.test(command)) {
parameters = command.split(' ');
command = parameters[0];
parameters = parameters.slice(1);
}
编辑应该没有什么区别的第二个想法; 据我所知,Safari应该能够处理简单的“在空间上分割”的事情。 确保在该代码周围添加了一些调试功能,以在函数认为无法在对象中找到“清除”时查看“命令”是什么。 就像@bobince所说的那样, 用var
!!!! 定义变量 !
现在在DOM Object实例上使用hasOwnProperty将返回false
function runCommand(commandString) {
var terminal = $('#terminal'), //cached to reduce calls to jQuery
commands = { //start object literal, continue var statement
clear: function (){
terminal.html('');
}
},
parameters = commandString.split(' '),
command = parameters.shift(); //end var statement
if (commands.hasOwnProperty(command)) {
commands[command].call(parameters);
console.log(command + ' command sent.'); //output for testing
} else {
terminal.append(command + ' command not recognized.<br>');
console.warn(command + ' command not recognized.'); //output for testing
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.