在試圖從通過JavaScript導入的文本刪除有問題的字符時的名稱爲null,我收到類型錯誤:名稱是在這條線「空」:類型錯誤:試圖更換有問題的字符
for (var i = 0; i < name.length; i++) {
這裏是代碼的相關部分 -
fixNameToMiniCharset : function (name) {
if(typeof name == 'undefined') {
com.synckolab.global.consoleService.logStringMessage("undefined string " + new Error("s").stack);
}
var ret = "";
// avoid double placeholders
var placeHolder = false;
for (var i = 0; i < name.length; i++) {
switch (name.charAt(i)) {
// character replaces... better this way
case '\u00e4':
case '\u00e1':
case '\u00e0':
case '\u00e2':
case '\u00e3':
case '\u00e5':
case '\u00e6':
placeHolder = false;
ret += 'a';
break;
case '\u00c4':
case '\u00c1':
case '\u00c0':
case '\u00c2':
case '\u00c3':
case '\u00c5':
case '\u00c6':
placeHolder = false;
ret += 'A';
break;
case '\u00f6':
case '\u00f3':
case '\u00f2':
case '\u00f4':
case '\u00f5':
case '\u00f8':
placeHolder = false;
ret += 'o';
break;
case '\u00d6':
case '\u00d3':
case '\u00d2':
case '\u00d4':
case '\u00d5':
case '\u00D6':
placeHolder = false;
ret += 'O';
break;
case '\u00fc':
case '\u00fa':
case '\u00f9':
case '\u00fb':
case '\u0169':
case '\u0171':
placeHolder = false;
ret += 'u';
break;
case '\u00dc':
case '\u00da':
case '\u00d9':
case '\u00db':
case '\u0168':
placeHolder = false;
ret += 'U';
break;
case '\u00c8':
case '\u00c9':
case '\u00ca':
case '\u00cb':
placeHolder = false;
ret += 'E';
break;
case '\u00e8':
case '\u00e9':
case '\u00ea':
case '\u00eb':
placeHolder = false;
ret += 'e';
break;
case '\u00ec':
case '\u00ed':
case '\u00ee':
case '\u00ef':
placeHolder = false;
ret += 'i';
break;
case '\u00dd':
case '\u00a5':
placeHolder = false;
ret += 'Y';
break;
case '\u00c7':
placeHolder = false;
ret += 'C';
break;
case '\u00e7':
placeHolder = false;
ret += 'c';
break;
case '\u00fd':
case '\u00ff':
placeHolder = false;
ret += 'y';
break;
case '\u00df':
placeHolder = false;
ret += 's';
break;
case '\u00f1':
placeHolder = false;
ret += 'n';
break;
case '\u00b2':
placeHolder = false;
ret += '2';
break;
case '\u00b3':
placeHolder = false;
ret += '3';
break;
// chars which are no problem just stay
case '_':
// make sure to print it only once
if(!placeHolder) {
ret += name.charAt(i);
placeHolder = true;
}
break;
default:
var c = name.charAt(i);
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9')) {
placeHolder = false;
ret += c;
} else {
if (!placeHolder) {
ret += '_';
placeHolder = true;
}
}
}
}
return ret;
我應該提到,我最初使用,如果(!名)具有相同的結果 – user1514992
當然,如果一個對象傳遞,一點不有一個長度屬性,你會得到一個錯誤:一個對象不是一個虛假值,但這並不意味着有一個長度屬性。這就是爲什麼我建議檢查'!name || !name.length' < - - 不具有length屬性的falsy值或值。順便說一句:我注意到你還沒有接受答案。如果你沒有答案,人們往往不會在一段時間後回答你的問題......只是一個友善的勸告詞:P –
謝謝。我沒有注意到巨大的複選標記!你的解決方案大多是有效的 - 我想我在其他地方遇到了其他問題。這是一個Thunderbird插件來同步聯繫人。如果我不使用默認的聯繫人文件夾,我可以使用修補程序正常工作。與默認文件夾(這應該工作),我仍然得到相同的錯誤。 – user1514992