我有一个对象
var data = {1:undefined,2:null,3:10,4:""}
我想将所有undefined和null值替换为0.我使用以下代码来执行此操作:
for (var index in data) {
if (!data[index]) {
data[index] = 0;
}
}
我期待的结果是:{1:0,2:0,3:10:4:""}
但结果是:{1:0,2:0,3:10:4:0}
因为它将空字符串视为null。是否知道行为?
我可以通过使用来检查它
(if(data[index] == undefined || data[index] == null))
但我想知道上述解决方案的行为。
答案 0 :(得分:1)
您可以添加typeof data[index] != 'string'
var data = {1:undefined,2:null,3:10,4:""}
for (var index in data) {
if (!data[index] && typeof data[index] != 'string') {
data[index] = 0;
}
}
console.log(data)

答案 1 :(得分:0)
尝试:
if ((typeof <your variable> == "undefined") ||
( <your variable> == "" ) ) {
<your variable> = 0 ;
}
顺便问一下,你是否正在使用&#34; 1&#34;,&#34; 2&#34;索引?
答案 2 :(得分:0)
这是因为长度为0的字符串是“falsy”,这意味着如果它被评估为布尔值,它将转换为false
。阅读“falsy”over here的更多信息。您可以通过以下方式修复代码:
for (var index in data) {
if (typeof data[index] == "undefined" || data[index] == null) {
data[index] = 0;
}
}