function F() {
w = !0;
return !1
}
Это особый способ установки булевой переменной? Почему автор сделал это?Что означает этот восклицательный знак в Javascript?
Edit: Контекст:
document.onmousedown = F;
function F() {
w = !0;
return !1
}
Это особый способ установки булевой переменной? Почему автор сделал это?Что означает этот восклицательный знак в Javascript?
Edit: Контекст:
document.onmousedown = F;
Это пример ненужного мастерства. Приведенный ниже код точно такие же:
function F() {
w = true; //w = !0;
return false //return !1
}
Если вы используете хороший инструмент минификации, который вы должны в производстве, умное программирование, чтобы сэкономить несколько байт становится ненужным.
OTOH Возможно, этот код появился из мини-фильтра. – kojiro
@kojiro True. Я быстро прыгнул с пистолета, предполагая, что код не получен из файла с миниатюрами. – stavarotti
В Javascript 0 ложное значение, и любое ненулевое значение верно. !
является логическим «не», поэтому !0
«не является ложным» или «истинным», а !1
«не является истинным» или «ложным».
Относительно того, почему автор сделал это - я понятия не имею.
! является оператором отрицания. ! 0 верно. ! 1 является ложным.
* подразумевает * неправильное слово. '! 0' - это точно. '! 1' точно неверно. – kojiro
Да, это способ установить логическое значение. В этом случае функция вернет false
, так как 1
может быть оценен до true
, и поэтому его отрицание (!
) будет оцениваться до false
.
Восклицательный знак является логическим не оператором, который преобразует эти значения в булевых и обеспечивают логические типы
так ж присваиваются верно
и ваше возвращение ложно
w
является переменным от внешний охват. !0
- true
, но занимает всего 2 байта, поэтому я предполагаю, что автор хотел установить w
как истину в функции обратного вызова и хотел сохранить байты.
!
означает «нет».
пример вы показываете не имеет особого смысла, в общем, где вы будете использовать это что-то вроде:
var visible = false;
$('#link').click(function() {
visible = !visible;
});
В этом случае выше, каждое нажатие будет «тумблер» переменная visible
.
Да, неуверенный, почему это было подавлено, может быть, downvoter позаботится объяснить почему? – aaronfay
Я не рекомендую этот подход, так как совершенно не нужно отрицать жестко закодированные значения. – TGH
@TGH '! 0' является' истинным' (логическим). Обратите внимание, что while '0 == false, 0! == false' – SheetJS
@TGH Я думаю, что точка'! 0' состоит в том, чтобы сохранить два символа (''! 0 ".length' равно 2, а' 'true" .length 'is 4) – SheetJS