我想将请求体中的值传递给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?
答案 0 :(得分:2)
即使在您关心的情况下(空字符串或错误),您对属性[p]的检查也将返回false。不应使用if (container[p])
,而应使用if (container.hasOwnProperty(p))
。
答案 1 :(得分:1)
您回答了自己的问题:空字符串是假的,因此在container[p] === ''
时评估为false:
if ( container[p] ) {
因此,paramsDict
的分配不会发生。