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

Why can't I set object property to empty string in JavaScript?

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

所以我们像这样将值传递给字典

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

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

container[p] = "" 的情况下 属性 paramsDict[p].value 永远不会被设置,即 typeof paramsDict[p].value returns "undefined" (注意:它确实在我尝试在此处分配对象之前不存在于对象上)。这意味着要添加一个我不想做的额外检查:

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

调查我发现 paramsDict[p].value = ""paramsDict[p].value = false 都将 属性 分别设置为空字符串和 false(我包括 false 因为空字符串在 JS 中是假的)。

typeof container[p] returns "string" 当值为空字符串时,我很惊讶没有将空字符串分配为值。

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

你回答了你自己的问题:空字符串是假的,所以当 container[p] === '':

时这将计算为假
if ( container[p] ) {

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

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

而不是 if (container[p])