为什么我不能将对象 属性 设置为 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])
我想将请求正文中的值传递到 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])