!!
аналогичен использованию булевого конструктора или, вероятно, больше похож на булевскую функцию .
console.log(Boolean(null)); // Preffered over the Boolean object
console.log(new Boolean(null).valueOf()); // Not recommended for coverting non-boolean values
console.log(!!null); // A hacky way to omit calling the Boolean function, but essentially does the same thing.
// The context you saw earlier (your example)
var vertical;
function Example(vertical)
{
this.vertical = vertical !== undefined ? !!vertical :
this.vertical;
// Let's break it down: If vertical is strictly not undefined, return the boolean value of vertical and set it to this.vertical. If not, don't set a value for this.vertical (just ignore it and set it back to what it was before; in this case, nothing).
return this.vertical;
}
console.log( "\n---------------------" )
// vertical is currently undefined
console.log(new Example(vertical).vertical); // The falsey or truthy value of this.vertical
console.log(!!new Example(vertical).vertical); // Coerced value of this.vertical
vertical = 12.5; // set vertical to 12.5, a truthy value.
console.log(new Example(vertical).vertical); // The falsey or truthy value of this.vertical which happens to be true anyway
console.log(!!new Example(vertical).vertical); // Coerced value of this.vertical
vertical = -0; // set vertical to -0, a falsey value.
console.log(new Example(vertical).vertical); // The falsey or truthy value of this.vertical which happens to be false either way
console.log(!!new Example(vertical).vertical); // Coerced value of this.vertical
Значения Falsey в javascript-принуждении к false и правным значениям принуждают к true. Ложные и правдивые значения также могут использоваться в if
утверждениях и будут по существу «отображать» их соответствующее булево значение. Тем не менее, вы, вероятно, не обнаружите, что вам нужно часто использовать правильные логические значения, так как они в основном отличаются выходом (возвращаемые значения).
Хотя это может показаться похожим на кастинг, реалистично это, скорее всего, простое совпадение и не «построено» или специально создано для и подобно булевскому литу. Поэтому не будем называть это.
Почему и как это работает
Чтобы быть кратким, это выглядит примерно так:
! ( !null )
. В то время какnull
является ложным, поэтому!null
будет истинным. Тогда!true
будет ложным, и по существу инвертирует назад на то, что было до этого, за исключением этого времени как правильное булевское значение (или даже наоборот с правными значениями , такими как{}
или1
).
Возвращаясь к вашему примеру
В целом контекст, который вы видели, просто настраивает
this.vertical
в зависимости от того, определено или нетvertical
, и если так; он будет установлен на результирующее логическое значение вертикали, иначе оно не изменится. Другими словами, еслиvertical
определен;this.vertical
будет установлен на логическое значение, иначе он останется неизменным. Я думаю, это само по себе является примером того, как вы будете использовать!!
и что он делает.
Пример вертикального ввода-вывода
Запустите это пример и возиться с вертикальным значением на входе. Посмотрите, к чему приводит результат, чтобы вы могли полностью понять код вашего контекста. На вкладке введите любое допустимое значение javascript. Не забудьте включить цитаты, если вы тестируете строку. Не обращайте внимания на CSS и HTML-код слишком просто, просто запустите этот фрагмент и поиграйте с ним. Тем не менее, вы можете взглянуть на javascript-код, не связанный с DOM (использование конструктора Example и вертикальной переменной).
var vertical = document.getElementById("vertical"); var p = document.getElementById("result"); function Example(vertical) { this.vertical = vertical !== undefined ? !!vertical : this.vertical; return this.vertical; } document.getElementById("run").onclick = function() { p.innerHTML = !!( new Example(eval(vertical.value)).vertical ); }
input { text-align: center; width: 5em; } button { margin: 15.5px; width: 14em; height: 3.4em; color: blue; } var { color: purple; } p { margin: 15px; } span.comment { color: brown; }
Vertical Example
var vertical = ; // enter any valid javascript value
...
Я собрал билет в службу поддержки Mailgun, и Марко ответил решением, которым я поделился:
$inline = curl_file_create(realpath('../includes/images/logo_sml.png'));
...
'inline' => $inline,
curl_file_create - Создает объект файла CURL для прикрепления изображения. , Остальная часть кода не изменилась.