目前,我有一个mongo数据库,用于跟踪用户提交的答案。当用户输入他们已经做过的答案时,这是或不是,我想检查是否有答案已经改变。问题是这只有一半的时间。Javascript比较布尔值
下面我有一个叫做服务的帆服务,当用户向Node.js服务器发送一个答案时,它从问题控制器调用。
QuestionServer.js
var ObjectID = require('mongodb').ObjectID;
module.exports = {
submitAnswer: function(tokenKey, questionId, answer, done) {
User.findOne({tokenKey: tokenKey}).exec(function (err, findOneRecord){
if(findOneRecord) {
var qId = ObjectID(questionId);
QuestionsAnswered.findOrCreate({question: qId, user: findOneRecord.id}).exec(function createFindCB(error, createdOrFoundRecord){
if(error) {
done(error, findOneRecord, null);
}else if(createdOrFoundRecord){
var oldAnswerChanged = QuestionService.submitAnswerCheck(createdOrFoundRecord.answer, answer);
console.log("Old Changed Answer = " + oldAnswerChanged);
createdOrFoundRecord.answer = answer;
createdOrFoundRecord.save(function(saveErr) {
QuestionService.submitCount(questionId, answer, oldAnswerChanged, done);
});
}
});
}
});
},
submitAnswerCheck: function(recordAnswer, answer) {
console.log("recordAnswer = " + recordAnswer);
console.log("answer = " + answer);
recordAnswer = Boolean(recordAnswer);
answer = Boolean(answer);
if(recordAnswer != answer){
return true;
}
return false;
}
}
正如你可以从我的代码见上面我submitAnswerCheck功能我想,以确保被传递给这个函数的布尔总是原语,从不布尔对象。
下面你会发现所有控制台日志输出到服务器。
有关以下输出的更多说明,更改!= to!==不会更改控制台的输出。下面的答案仍然是一样的。
输出到控制台:
recordAnswer = true
answer = true
Old Changed Answer = false
recordAnswer = true
answer = false
Old Changed Answer = false
recordAnswer = false
answer = false
Old Changed Answer = true
recordAnswer = false
answer = true
Old Changed Answer = true
recordAnswer = true
answer = true
Old Changed Answer = false
我想看到的是一个输出示例2和4都为“老更改答案”回归真实的,但似乎是发生的是,每当recordAnswer是false submitAnswerCheck始终返回true。
最后这里是保存布尔到MongoDB的模型:
QuestionsAnswered.js
module.exports = {
attributes: {
question: {
model: "question",
required: true
},
user: {
model: "user",
required: true
},
answer: {
type: "boolean",
boolean: true
}
}
};
我不知道如果我错过理解布尔元和布尔对象,或者之间的区别在我的模型中设置布尔值时还有其他东西缺失。在比较javascript/sails.js中的布尔值时是否有其他人遇到过这个问题?