能帮帮我吗?
我想了解这行:
data: !!data && _.mapObject(data, ...
更确切地说,“ !!”的含义在下面的JS代码中:
$.ajax({
type: "POST",
url: url,
dataType: "json",
async: true,
data:
!!data &&
_.mapObject(data, function(value) {
return $.toJSON(value);
}),
statusCode: {
500: function() {},
},
success: function(response) {
if (_.isUndefined(response.isDocument)) {
response.isDocument = that._currentSearch.type == "document";
}
if (response && response.searchResult) {
$(response.searchResult.hits).each(function(i, item) {
item.uniqueHitId = SearchModel.generateUniqueHitId();
searchModel._cacheResult[item.uniqueHitId] = item;
});
successHandler(response, that.isFacetListFound, adaptHighlights, filters);
} else {
errorHandler("No result found", response.Error);
}
},
error: errorHandler,
});
请注意,我知道!如果定义了此对象,则将对象强制转换为true,但就我而言,此行之后的数据内容为:
{
message: "data is not defined"
stack: "ReferenceError: data is not defined"}
请从执行的调试结果中查看此屏幕截图: enter image description here
非常感谢您。
答案 0 :(得分:0)
!!
又称为非操作符,用于证明该值是boolean
或将其强制转换为boolean
使用!!的好处之一!表示您的设计决策只返回一个真值或假值。当您或其他人查看该代码时,会出现一个!!遇到时,唯一可能的返回值为true或false。使用此逻辑工具是否可以提高可读性是一个争论的问题。
最常见的批评!它似乎增加了复杂性,可以通过稍微多一些的代码(可能具有更大的灵活性)来简化。另一个批评是关于零是虚假的值,因此许多与数字有关的用例会引起更多关注。
参考:https://medium.com/@edplatomail/js-double-bang-or-the-not-operator-part-40e55d089bf0
&&
运算符将参数作为!!data
放在参数(boolean
之前,如果它是true
,它将在运算符({{1 }}),否则它将仅返回_.mapObject(data, ...