Значение "!!" в Javascript

Я тоже не понимаю эту строчку

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,
});

Обычно, !! приводит объект к истинному значению, если этот объект определен, но в моем случае содержимое данных после этой строки:

{
message: "data is not defined"
stack: "ReferenceError: data is not defined"}

См. Этот снимок экрана с результатом отладки выполнения: введите описание изображения здесь

!! - это not not, это обычный способ сделать что-то правдивым.
Liam 09.01.2019 15:45
stackoverflow.com/questions/9549780/… - вероятно, это более актуальный обман, поскольку он охватывает оба вопроса
VLAZ 09.01.2019 15:46

@Liam - более распространенный способ сделать что-то правдивое истинный

robertklep 09.01.2019 15:47

Что значит «не нет»? Вы можете дать мне понять больше? Спасибо

ESSABRI 09.01.2019 15:48

Прочтите дублировать

Liam 09.01.2019 15:49

@liam, я действительно знаю, что означает &&, но в этом контексте я запутался!

ESSABRI 09.01.2019 15:49
stackoverflow.com/questions/50795708/…
Karim 09.01.2019 15:49

Благодарим @Karim за помощь, я понимаю, что значение данных после этой строки будет логическим значением, но в моем случае результатом является объект, см. Обновленное описание

ESSABRI 09.01.2019 16:03

Спасибо @Liam, и все мне ответили: теперь я понимаю.

ESSABRI 31.05.2019 18:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
10
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

!! AKA дубль не оператор используется для доказательства того, что значение является boolean, или оно будет преобразовано как boolean.

Одно из преимуществ использования !! означает, что ваше дизайнерское решение должно было возвращать только истинное или ложное значение. Когда вы или кто-то другой просматриваете этот код и !! встречается, единственные возможные возвращаемые значения - истина или ложь. Можно спорить о том, улучшится ли читаемость с использованием этого логического инструмента.

Самая частая критика использования !! это его кажущаяся дополнительная сложность, которую можно упростить, добавив немного большего количества кода, который может иметь большую гибкость. Еще одна критика связана с тем, что ноль является ложным значением, поэтому многие варианты использования, связанные с числами, вызывают дополнительные опасения.

Ссылка: https://medium.com/@edplatomail/js-double-bang-or-the-not-operator-part-40e55d089bf0

Оператор && оценивает предшествующий ему аргумент (!!data) как boolean, и если это true, он вернет аргумент, следующий за оператором (_.mapObject(data, ...), в противном случае он вернет только false.

Спасибо за ваш комментарий! Я понимаю, что значение данных после этой строки будет логическим значением, но в моем случае результатом является объект, см. Обновленное описание Спасибо.

ESSABRI 09.01.2019 16:05

Я обновил ответ, также проверьте ссылку в комментариях к вашему ответу, поскольку другой пользователь указал вам в правильном направлении

Mosè Raguzzini 09.01.2019 16:15

Пожалуйста, дружище :)

Mosè Raguzzini 03.06.2019 10:54

Другие вопросы по теме