在node.js应用程序中,我发现了一个函数(这是一个用于http.ServerResponse类的猴子补丁),它传递了两个参数:
这是功能代码:
http.ServerResponse.prototype.respond = function (content, status) {
if ('undefined' == typeof status) { // only one parameter found
if ('number' == typeof content || !isNaN(parseInt(content))) { // usage "respond(status)"
status = parseInt(content);
content = undefined;
} else { // usage "respond(content)"
status = 200;
}
}
if (status != 200) { // error
content = {
"code": status,
"status": http.STATUS_CODES[status],
"message": content && content.toString() || null
};
}
if ('object' != typeof content) { // wrap content if necessary
content = {"result":content};
}
// respond with JSON data
this.send(JSON.stringify(content)+"\n", status);
};
我无法理解此行中内容的消息属性受影响的值的含义:
"message": content && content.toString() || null
由于'&&'是逻辑运算符,因此content和content.toString()必须解释为二进制(true / false)。在javascript中将字符串转换为二进制文件意味着什么? (当它不是null或未定义时,它会是真的吗?)
我做了这样的测试:
//content = {var1:'val1', var2:'val2'};
content = "some content here";
/*console.log('content.toString() : ' + content.toString()); // [object Object]
console.log('JSON.stringify() : ' + JSON.stringify(content));
*/
console.log('content == true' + content == true); // this will display : false
console.log('content.toString() == true' + content.toString() == true); // false too..
console.log('content && content.toString() : ' + content && content.toString()); // this will display nothing
console.log('(content && content.toString()) == true' + (content && content.toString()) == true); // false
var message = content && content.toString() || null; //
console.log('message : ' + message);
如图所示:
content == true // returns false
content.toString() == true // returns false too
我只是假设影响“消息”的值测试内容是否存在并将其转换为String但我不理解其背后的逻辑。