2013-10-02 2 views
3
function F() { 
    w = !0; 
    return !1 
} 

Это особый способ установки булевой переменной? Почему автор сделал это?Что означает этот восклицательный знак в Javascript?

Edit: Контекст:

document.onmousedown = F; 
+1

Я не рекомендую этот подход, так как совершенно не нужно отрицать жестко закодированные значения. – TGH

+0

@TGH '! 0' является' истинным' (логическим). Обратите внимание, что while '0 == false, 0! == false' – SheetJS

+0

@TGH Я думаю, что точка'! 0' состоит в том, чтобы сохранить два символа (''! 0 ".length' равно 2, а' 'true" .length 'is 4) – SheetJS

ответ

2

Это пример ненужного мастерства. Приведенный ниже код точно такие же:

function F() { 
    w = true; //w = !0; 
    return false //return !1 
} 

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

+5

OTOH Возможно, этот код появился из мини-фильтра. – kojiro

+1

@kojiro True. Я быстро прыгнул с пистолета, предполагая, что код не получен из файла с миниатюрами. – stavarotti

0

В Javascript 0 ложное значение, и любое ненулевое значение верно. ! является логическим «не», поэтому !0 «не является ложным» или «истинным», а !1 «не является истинным» или «ложным».

Относительно того, почему автор сделал это - я понятия не имею.

0

! является оператором отрицания. ! 0 верно. ! 1 является ложным.

+3

* подразумевает * неправильное слово. '! 0' - это точно. '! 1' точно неверно. – kojiro

0

Да, это способ установить логическое значение. В этом случае функция вернет false, так как 1 может быть оценен до true, и поэтому его отрицание (!) будет оцениваться до false.

1

Восклицательный знак является логическим не оператором, который преобразует эти значения в булевых и обеспечивают логические типы

так ж присваиваются верно

и ваше возвращение ложно

2

w является переменным от внешний охват. !0 - true, но занимает всего 2 байта, поэтому я предполагаю, что автор хотел установить w как истину в функции обратного вызова и хотел сохранить байты.

-1

! означает «нет».

пример вы показываете не имеет особого смысла, в общем, где вы будете использовать это что-то вроде:

var visible = false; 

$('#link').click(function() { 
    visible = !visible; 
}); 

В этом случае выше, каждое нажатие будет «тумблер» переменная visible.

+0

Да, неуверенный, почему это было подавлено, может быть, downvoter позаботится объяснить почему? – aaronfay

Смежные вопросы