Подходы Javascript к логическому обращению

Следующее применимо к любой логической переменной, но я писал небольшую функцию на javascript, которая переворачивает проверку в данном флажке, мне стало скучно, и я задумался, насколько я могу ее сжать.

Начал с:

checkbox = document.getElementById('checkbox');
checkbox.checked = (checkbox.checked ? false : true);

Затем переехал в

checkbox = document.getElementById('checkbox');
checkbox.checked = !(checkbox.checked);

А потом

document.getElementById('checkbox').checked ^= 1;

Я не мог понять логический унарный подход, например

!(document.getElementById('checkbox').checked);

Но я обнаружил, что -- работает, хотя ++ - нет (abs val?)

document.getElementById('checkbox').checked--;

Я также не уверен, поддерживает ли js (или любой другой язык, если на то пошло) некоторую неявную ссылку на переменную в левой части уравнения, например:

document.getElementById('checkbox').checked = !(left.side);

Обычно есть 1000 способов сделать одно и то же. Какие-нибудь другие изящные подходы? Существует ли «лучший» подход по какой-либо причине (или наиболее совместимый с разными языками)?


person Eric    schedule 09.04.2013    source источник
comment
Отвратительный вариант через DOM дважды `document.getElementById('checkbox').checked = !document.getElementById('checkbox').checked;`   -  person Mark Schultheiss    schedule 10.04.2013
comment
Во втором примере вам не нужны скобки справа.   -  person Mark Schultheiss    schedule 10.04.2013
comment
Мне нравится вариант document.getElementById('checkbox').checked ^= 1; — он креативный.   -  person Justin Warkentin    schedule 10.04.2013
comment
@JustinWarkentin - Да, это так. Но я боюсь, что большинство разработчиков не поймут, что происходит.   -  person Bart    schedule 10.04.2013
comment
@Bart Если они не знают, что ^= - это XOR (или что это значит), им следует поискать это. Я не говорю, что он самый понятный, но разработчик должен знать их операторов.   -  person Paul S.    schedule 10.04.2013
comment
@ПолС. По большей части я с вами согласен. Но всегда следует избегать сложности там, где она не нужна.   -  person Bart    schedule 10.04.2013
comment
@Bart Я должен согласиться с @Paul S. XOR не сложен, и если вы не знаете своих основных побитовых операторов, вам не следует быть разработчиком - если вы не новичок в разработке, и в этом случае вы должны изучить это сейчас . Побитовые операции являются мощными и критически важными для многих приложений. То же самое и с использованием & 1 для проверки нечетности числа. Это просто, эффективно и действительно не загадочно.   -  person Justin Warkentin    schedule 10.04.2013
comment
@JustinWarkentin Это очень резкое заявление. Тот, кто не знает побитовых операторов, может быть очень хорошим разработчиком. Это как сказать: не знаешь ЭБУ? Не водите машину!.   -  person Bart    schedule 10.04.2013
comment
@JustinWarkentin Я изучал программирование в колледже, а затем получил степень в области компьютерных наук. В колледже мы никогда не слышали ни слова о побитовых операторах, за исключением того, что они существуют. В университете их неоднократно вдалбливали нам в головы. Я думаю, что большинство разработчиков прекрасно справятся и без них, но они могут помочь сэкономить время, ЕСЛИ вы знаете, где и когда их можно использовать. Также полезно для понимания кода других людей.   -  person Eric    schedule 10.04.2013
comment
Вы можете быть разработчиком, не разбираясь в битовых операторах, но я бы не сказал, что вы хороший разработчик. Я не знаю, я думаю, я просто пришел из прошлого, когда я использовал их с 16 лет, и я писал библиотеки, которые не могли работать без них. Я рассматриваю побитовое как необходимость для любого серьезного программиста.   -  person Justin Warkentin    schedule 10.04.2013


Ответы (1)


Я всегда использую что-то вроде this.checked = !this.checked, потому что это самое логичное и читаемое решение, которое я знаю. Кроме того, он работает на любом языке, который я использую.

person Bart    schedule 09.04.2013
comment
ЕСЛИ контекст this получен, мне кажется, лучший метод. - person Mark Schultheiss; 10.04.2013
comment
@MarkSchultheiss - это просто для иллюстрации. Без контекста. - person Bart; 10.04.2013
comment
Да, как версия jQuery: $('#myme').prop('checked',!this.checked);, чтобы изменить ее на противоположную. +1, так как ваш ответ был тем, что я тоже собирался добавить. - person Mark Schultheiss; 10.04.2013
comment
@Bart У меня не было прямого доступа к объекту, поэтому я не мог использовать «это», но это было учтено. - person Eric; 10.04.2013