为什么我不能在JavaScript中将对象属性设置为空字符串?

时间:2015-01-30 18:56:47

标签: javascript undefined string

我想将请求体中的值传递给paramsDict对象,其中我已经定义了约束来测试参数。我不要求每个请求都发送所有可能的参数,如果在客户端删除了一个值,它也可以作为空字符串发送。

所以我们将值传递给字典,如此

for ( p in paramsDict ) {
   if ( container[p] ) {
      paramsDict[p].value = container[p];
   }
  }

其中container设置为req.body(在node.js express中)。

如果container[p] = ""属性paramsDict[p].value永远不会被设置,即typeof paramsDict[p].value返回"undefined"(注意:在我尝试分配之前,它在对象上不存在在这里)。这意味着添加一个额外的支票,我宁愿不用:

if (typeof container[p] == "string" && container[p].length == 0){
  paramsDict[p].value = "";
}

调查我看到paramsDict[p].value = ""paramsDict[p].value = false都将属性设置为空字符串并且分别为false(我包含false,因为JS中的空字符串为false)。

当值为空字符串时,

typeof container[p]返回"string",所以我非常惊讶的是没有将空字符串赋值为值。

这是为JS的这个实现做出的决定还是一个bug?

2 个答案:

答案 0 :(得分:2)

即使在您关心的情况下(空字符串或错误),您对属性[p]的检查也将返回false。不应使用if (container[p]),而应使用if (container.hasOwnProperty(p))

答案 1 :(得分:1)

您回答了自己的问题:空字符串是假的,因此在container[p] === ''时评估为false:

if ( container[p] ) {

因此,paramsDict的分配不会发生。