8

我将存储在 javascript 变量中的文本附加到 div 元素中。问题在于,根据具体情况,可能会或可能不会将文本存储在该变量中。如果没有,我最终会得到有效文本在 div 中的文本“未定义”。

举个例子:

htmlelement.innerhtml = '<h2>'+array.object.title+
                        '</h2><p>'+array.object.textField1+
                        '</p><p>'+array.object.textField2+
                        '</p><p>'+array.object.textfield3+'</p>';

这显示在一个函数中,该函数将为数组中的每个对象运行。并非所有对象在所有 3 个文本字段中都有内容。

那么有没有一种简单的方法来防止 'undefined 被打印?

现在我在上一行之前有这个:

if (!array.object.textfield1) {
    array.object.textfield1 = ' ';
}
if (!array.object.textfield2) {
    array.object.textfield2 = ' ';
}
if (!array.object.textfield3) {
    array.object.textfield3 = ' ';
}

但是如果有很多变量需要检查,这不是一个实际的解决方案。

4

4 回答 4

14

你可以使用逻辑运算符||吗?

array.object.textField1||''

注意:请注意值 like0或任何其他falsy值。

于 2013-07-06T21:44:04.890 回答
1

使用“新白痴”的答案,这只是一种额外的方法。

另一个答案更好,因为它将检查融入逻辑(一件好事!)并且对性能更好。

用那个说正则表达式

htmlelement.innerText = htmlelement.innerText.replace('undefined', '');
于 2013-07-06T21:46:10.410 回答
1

检查每个数组项以查看其是否使用 **typeof** 运算符未定义。
对于每个数组项,如果 **typeof** 是 **undefined** 您可以做两件事:

1. 设置为默认值
2. 使用 splice() 删除

例子:

    function cleanArray(theArray){
        for(i=0;i < theArray.length;i++){
            if(typeof theArray[i] == "undefined"){
                theArray[i]="";//OR SPLICE IT OU WITH splice()
            }
        }
    }
    //NOW CALL THIS FUNCTION EVERYTIME PASSING IT THE ARRAY
    cleanArray(arrayOfItems);

解决这个问题没有简单的方法,您需要相应地规划您的设计

于 2013-07-06T22:06:23.570 回答
0

如果你只有几个,“新白痴”的答案就很好了。如果您要整理一个更复杂的对象,一种选择是遍历属性并将它们设置为空字符串(如果它们未定义)。例如

var o = {
    t1: undefined,
    t2: "hey"
};

for (prop in o) {
    if (o.hasOwnProperty(prop) && typeof o[prop] === "undefined") {
        o[prop] = "";
    }
}

jsfiddle:http: //jsfiddle.net/Ca6xn/

于 2013-07-06T21:53:39.743 回答