我在stackoverflow上找到了这个有用的代码片段:
Array.prototype.clean = function(deleteValue) {
for (var i = 0; i < this.length; i++) {
if (this[i] == deleteValue) {
this.splice(i, 1);
i--;
}
}
return this;
};
我用它从我目前移植到firefox的chrome扩展中的数组中删除空值。我用的是这样的:
foobar = foo.concat(bar).clean('').toString();
哪个在chrome中运行正常,但在firefox中我得到一个TypeError:
TypeError: foo.concat(...).clean is not a function
有什么建议可能是什么问题?
// // EDIT
foo和bar是数组,foo来自json,它被解析如下:
var json = {property: 'a,b,c,d,e,f,g'};
json = json.property.split(',');
和来自textarea的bar,它被解析如下:
function digestTextField (string) {
// takes string of format "a, b , c", trims spaces, converts to lower case
var rawText = document.getElementById(string + 'Events').value,
digestedText = rawText.split(','),
i;
for (i = 0; i < digestedText.length; i += 1) {
digestedText[i] = digestedText[i].toLowerCase()
.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}
return digestedText;
}
然后在调用.clean('')之前将两者保存到simpleStorage并从中读取。
答案 0 :(得分:0)
发布的代码没有问题,也许你在调用后添加了clean原型?以下适用于xul应用程序:
function jsdump(str) {
Components.classes['@mozilla.org/consoleservice;1']
.getService(Components.interfaces.nsIConsoleService)
.logStringMessage(str);
}
Array.prototype.clean = function(deleteValue) {
for (var i = 0; i < this.length; i++) {
if (this[i] == deleteValue) {
this.splice(i, 1);
i--;
}
}
return this;
};
var foo = {property: 'a,b'};
foo = foo.property.split(',');
var bar="5,6,,7,".split(",");
jsdump("Array has clean:"+Array.prototype.hasOwnProperty("clean"));
jsdump("is foo an array:"+(foo instanceof Array));
jsdump("is bar an array:"+(bar instanceof Array));
jsdump(foo.concat(bar).clean('').toString());
在默认值\ preferences \ prefs.js中:
pref("browser.dom.window.dump.enabled", true);
pref("javascript.options.showInConsole", true);
pref("javascript.options.strict", true);
pref("nglayout.debug.disable_xul_cache", true);
pref("nglayout.debug.disable_xul_fastload", true);
使用以下命令启动应用程序:
firefox --app application.ini -jsconsole