Я тоже не понимаю эту строчку
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"}
См. Этот снимок экрана с результатом отладки выполнения: введите описание изображения здесь
@Liam - более распространенный способ сделать что-то правдивое истинный
Что значит «не нет»? Вы можете дать мне понять больше? Спасибо
Прочтите дублировать
@liam, я действительно знаю, что означает &&, но в этом контексте я запутался!
Благодарим @Karim за помощь, я понимаю, что значение данных после этой строки будет логическим значением, но в моем случае результатом является объект, см. Обновленное описание
Объект - превращается в логическое значение, когда вы выполняете на нем !!.
Спасибо @Liam, и все мне ответили: теперь я понимаю.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


!! AKA дубль не оператор используется для доказательства того, что значение является boolean, или оно будет преобразовано как boolean.
Одно из преимуществ использования !! означает, что ваше дизайнерское решение должно было возвращать только истинное или ложное значение. Когда вы или кто-то другой просматриваете этот код и !! встречается, единственные возможные возвращаемые значения - истина или ложь. Можно спорить о том, улучшится ли читаемость с использованием этого логического инструмента.
Самая частая критика использования !! это его кажущаяся дополнительная сложность, которую можно упростить, добавив немного большего количества кода, который может иметь большую гибкость. Еще одна критика связана с тем, что ноль является ложным значением, поэтому многие варианты использования, связанные с числами, вызывают дополнительные опасения.
Ссылка: https://medium.com/@edplatomail/js-double-bang-or-the-not-operator-part-40e55d089bf0
Оператор && оценивает предшествующий ему аргумент (!!data) как boolean, и если это true, он вернет аргумент, следующий за оператором (_.mapObject(data, ...), в противном случае он вернет только false.
Спасибо за ваш комментарий! Я понимаю, что значение данных после этой строки будет логическим значением, но в моем случае результатом является объект, см. Обновленное описание Спасибо.
Я обновил ответ, также проверьте ссылку в комментариях к вашему ответу, поскольку другой пользователь указал вам в правильном направлении
Пожалуйста, дружище :)
!!- этоnot not, это обычный способ сделать что-то правдивым.