router.delete('/board', function (req, res, next) {
var body = req.body;
if (!isEmpty(body)) {
var index = findIndexInList(body);
list.splice(index,1);
res.sendStatus(200);
return;
}
list=[];
res.sendStatus(200);
});
function findIndexInList(key) {
for (var index in list) {
var value = list[index];
//value = { '{data:"2"}': '' } TypeOf = Object
//key = { '{data:"2"}': '' } TypeOf = Object
console.log(value === key); // why false? I think same so TRUE..
if( value === key ) {
return list.indexOf(value);
}
}
return undefined;
}
您好。让我问几个关于req.body的问题
当我从客户端发送数据时,如chrome console
(
$.ajax({
type: 'delete',
data : '{data:"2"}
});)
在服务器端,LIST数组有数据。
所以我将相同的数据发送到服务器端。
例如
list = [{ '{data:"1"}': '' },{ '{data:"2"}': '' } ];
//value = { '{data:"2"}': '' } Type = Object
//key = { '{data:"2"}': '' } Type = Object
console.log(value === key); // FALSE
为什么错?我认为相同的对象和数据都是真的..
答案 0 :(得分:1)
您正在比较javascript中的Objects
,这是不可能的。没有比较对象的好方法。但是,如果您的对象很简单,没有方法,那么您可以在将其转换为json string
{} !== {}
key = { '{data:"2"}': '' }
value = { '{data:"2"}': '' }
JSON.stringify(key) === JSON.stringify(value)
答案 1 :(得分:0)
当javascript测试对象均衡时,使用double或triple eq,它将始终检查内部引用。 ref here
运行此
var g = {some: 'thing'}
console.log({} == {});
console.log({a:1} == {a:1});
console.log({a:1} == {a:2});
console.log({} === {});
console.log(g === g);
console.log(g == g);
给我们
false
false
false
false
true
true
如果你需要测试对象内容的相等性,你应该使用像这个模块https://github.com/substack/node-deep-equal
这样的东西正如您所见here,它能告诉您两个不同的objet实例是否具有相同的内容。
您也可以使用提到的字符串化提示。