ÐогиÑеÑкое ÐÐ (!)
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
ÐогиÑеÑкий опеÑаÑÐ¾Ñ ÐÐ (!) (логиÑеÑкое оÑÑиÑание) менÑÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкое знаÑение опеÑанда Ñ Ð¸ÑÑÐ¸Ð½Ñ Ð² Ð»Ð¾Ð¶Ñ Ð¸ наобоÑоÑ. ÐбÑÑно он иÑполÑзÑеÑÑÑ Ñ Ð±ÑлевÑми (логиÑеÑкими) знаÑениÑми. ÐÑи иÑполÑзовании Ñ Ð»ÑбÑми дÑÑгими знаÑениÑми, еÑли опеÑанд Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑеобÑазован в true, Ñо веÑнÑÑ false; в пÑоÑивном ÑлÑÑае он возвÑаÑаеÑÑÑ true.
ÐнÑеÑакÑивнÑй пÑимеÑ
const a = 3;
const b = -2;
console.log(!(a > 0 || b > 0));
// Expected output: false
СинÑакÑиÑ
!expr;
ÐпиÑание
ÐозвÑаÑÐ°ÐµÑ false, еÑли опеÑанд Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑеобÑазован в true; в пÑоÑивном ÑлÑÑае возвÑаÑаеÑÑÑ true.
ÐÑли знаÑение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑеобÑазовано в true, Ñо оно ÑаÑÑмаÑÑиваеÑÑÑ ÐºÐ°Ðº иÑÑинноподобное (truthy). ÐÑли же знаÑение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑеобÑазовано в false, Ñо оно назÑваеÑÑÑ Ð»Ð¾Ð¶Ð½Ð¾Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñм (falsy).
ÐÑимеÑÑ Ð²ÑÑажений, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ Ð² false:
null;NaN;0;- пÑÑÑÐ°Ñ ÑÑÑока (
"",'',``); undefined.
ÐеÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо опеÑаÑÐ¾Ñ ! Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ñ Ð¾Ð¿ÐµÑандами, знаÑÐµÐ½Ð¸Ñ ÐºÐ¾ÑоÑÑÑ
не оÑноÑиÑÑÑ Ðº ÑÐ¸Ð¿Ñ Boolean, ÑÑо вÑÑ Ñавно бÑлевÑй опеÑаÑоÑ, поÑколÑÐºÑ ÐµÐ³Ð¾ возвÑаÑаемое знаÑение вÑегда можно пÑеобÑазоваÑÑ Ð² бÑлевÑй пÑимиÑив. ЧÑÐ¾Ð±Ñ Ñвно пÑеобÑазоваÑÑ Ð²Ð¾Ð·Ð²ÑаÑаемое знаÑение ÑÑого опеÑаÑоÑа (или вообÑе лÑбое вÑÑажение) в ÑооÑвеÑÑÑвÑÑÑее знаÑение бÑлевого Ñипа, иÑполÑзÑйÑе двойной опеÑаÑÐ¾Ñ ÐРили конÑÑÑÑкÑÐ¾Ñ Boolean.
ÐÑимеÑÑ
>ÐÑполÑзование логиÑеÑкого ÐÐ
Ð ÑледÑÑÑем коде Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð¿ÑимеÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа ! (логиÑеÑкое ÐÐ).
n1 = !true; // !t веÑнÑÑ false
n2 = !false; // !f веÑнÑÑ true
n3 = !""; // !f веÑнÑÑ true
n4 = !"Cat"; // !t веÑнÑÑ false
Ðвойное ÐÐ (!!)
Ðожно один за дÑÑгим иÑполÑзоваÑÑ Ð¿Ð°ÑÑ Ð¾Ð¿ÐµÑаÑоÑов ÐÐ, ÑÑÐ¾Ð±Ñ ÑвнÑм обÑазом пÑинÑдиÑелÑно пÑеобÑазоваÑÑ Ð»Ñбое знаÑение в ÑооÑвеÑÑÑвÑÑÑий бÑлевÑй пÑимиÑив. ÐÑеобÑазование оÑновано на "иÑÑинноподобноÑÑи" или "ложноподобноÑÑи" знаÑÐµÐ½Ð¸Ñ (Ñм. truthy и falsy)).
ТоÑно Ñакое же пÑеобÑазование Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñполнено Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑии Boolean.
n1 = !!true; // !!truthy веÑнÑÑ true
n2 = !!{}; // !!truthy веÑнÑÑ true: лÑбой обÑÐµÐºÑ - иÑÑинноподобнÑй...
n3 = !!new Boolean(false); // ...даже Boolean-обÑÐµÐºÑ Ñо знаÑением false из вÑзова .valueOf()!
n4 = !!false; // !!falsy веÑнÑÑ false
n5 = !!""; // !!falsy веÑнÑÑ false
n6 = !!Boolean(false); // !!falsy веÑнÑÑ false
ÐонвеÑÑаÑÐ¸Ñ Ð¾Ð¿ÐµÑаÑоÑов ÐÐ
СледÑÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ñ Ð±ÑлевÑми знаÑениÑми:
!!bCondition;
вÑегда ÑквиваленÑна:
bCondition;
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-logical-not-operator> |