表示“ !!”用Java语言编写

时间:2019-01-09 14:44:09

标签: javascript ajax

能帮帮我吗?

我想了解这行:

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

非常感谢您。

1 个答案:

答案 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, ...