Сделать операторы равенства возвращать двоичный код вместо bool [duplicate]

Использование одного и того же идентификатора более чем некорректно разметки, а когда getElementById возвращает только один элемент, он возвращает первый, с которым он сталкивается.

Однако, если вы не можете изменить разметки с использованием существующего сценария точно так же, как вы можете использовать querySelectorAll для выбора всего элемента с тем же значением атрибута id.

var videos = document.querySelectorAll('[id="vid"]')

for (var i = 0; i < videos.length; i++) {
    videos[i].addEventListener('ended', function() {
        // Reset the video to 
        video.currentTime = 0;
        // And play again
        video.load();
    });
}

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

Лично я склоняюсь к атрибутам данных для функционального использования и оставляю классы для использования CSS.

Таким образом, их использует исключение для посещения, а пользовательские интерфейсы, изменяющие классы / css, не будут влиять на ваш функциональный код, поскольку они не должны изменять атрибуты и наоборот.

92
задан pic11 20 March 2011 в 20:14
поделиться

4 ответа

int x = 4<5;

Полностью портативный. Стандартное соответствие. bool to int неявно!

§4.7 / 4 из C ++ Standard говорит (Integral Conversion )

Если тип источника - bool, значение false преобразуется в ноль, а значение true преобразуется в единицу.


Что касается C, насколько я знаю, существует no bool в C. (до 1999 года) Таким образом, преобразование bool в int имеет значение только на C ++. В C 4<5 оценивается значение int, в этом случае значение равно 1, 4>5 будет оценивать значение 0.

EDIT: Jens в комментарии сказал: C99 имеет _Bool. bool - макрос, определенный в файле заголовка stdbool.h. true и false также являются макросами, определенными в stdbool.h.

§7.16 из C99 говорит,

Макрос bool расширяется до _Bool.

[..] true, который расширяется до целочисленной константы 1, false, которая расширяется до целочисленной константы 0, [..]

152
ответ дан jamylak 22 August 2018 в 00:07
поделиться
  • 1
    что с 1999 года существует bool в C. Просто используйте «stdbool.h». заголовок, и это должно быть включено. – Jens Gustedt 20 March 2011 в 18:01
  • 2
    @Jens: Я этого не знал. Позвольте мне уточнить свой ответ. – Nawaz 20 March 2011 в 18:03
  • 3
    @Jens: BTW, это _Bool, а не bool. правильно? – Nawaz 20 March 2011 в 18:06
  • 4
    В самом деле, я проверил его на нескольких компиляторах, и он кажется переносимым. – pic11 20 March 2011 в 18:46
  • 5
    Независимо от версии языка C и доступности типа bool / _Bool, реляционные операторы в C производят int, а не bool. То есть даже в C99 реляционные операторы все еще производят int. – AnT 20 March 2011 в 19:09

Кажется, нет проблем, поскольку int to bool cast выполняется неявно. Это работает в компиляторе Microsoft Visual C ++, GCC и Intel C ++. Нет проблем ни на C, ни на C ++.

2
ответ дан Alex James 22 August 2018 в 00:07
поделиться
  • 1
    Спасибо, что нашли время и тестирование. – pic11 20 March 2011 в 18:48
  • 2
    & quot; Он работает в некоторых случаях & quot; не является хорошим способом проверить правильность, особенно с неопределенными версиями этих инструментов. Я предпочитаю подход в других ответах; они не могут гарантировать правильность конкретной реализации, но они могут гарантировать то, что будет делать правильная реализация. – Matthew Read 10 May 2012 в 22:15

Вы одновременно отметили свой вопрос [C] и [C ++]. Результаты будут согласованы между языками, но структура ответа различна для каждого из этих языков.

На языке C ваши примеры не имеют никакого отношения к bool вообще (что относится к C99 as Что ж). В языке C реляционные операторы не дают результатов bool. И 4 > 5, и 4 < 5 являются выражениями, которые дают результаты типа int со значениями 0 или 1. Таким образом, в ваших примерах нет никакого преобразования «bool to int» в ваших примерах в C.

. В C ++ реляционные операторы действительно дают результаты bool. Значения bool конвертируются в тип int, при этом true преобразуется в 1 и false преобразование в 0. Это гарантируется языком.

P.S. Язык C также имеет выделенный логический тип _Bool (с макроснимками как bool), а его интегральные правила преобразования по существу те же, что и в C ++. Но тем не менее это не относится к вашим конкретным примерам в C. Еще раз, реляционные операторы в C всегда вызывают результаты int (not bool) независимо от версии спецификации языка.

39
ответ дан AnT 22 August 2018 в 00:07
поделиться
  • 1
    +1 для учета C и C ++. – Prasoon Saurav 20 March 2011 в 17:43
  • 2
    Правильно, в K & amp; R C. нет bool. Я повторил свой вопрос как C99. – pic11 20 March 2011 в 18:42
  • 3
    @ pic11: Не нужно было ничего менять. Он не имеет ничего общего с K & amp; R или любым другим C. Даже если в C99 есть bool, реляционные операторы все еще производят int в C99, а не bool. Итак, если вас интересуют специфические реляционные операторы (как в ваших примерах), проблема все еще не связана с bool. – AnT 20 March 2011 в 19:05
  • 4
    Теперь я понимаю. Результат оператора отношения неявно конвертируется в int. Это верно в C, C99 и C ++. Повторно настроен. – pic11 20 March 2011 в 20:14
  • 5
    @ pic11: Нет, вы этого не понимаете. В C, включая C99, результатом оператора сравнения является int, а не bool. Преобразование не выполняется. – R.. 20 March 2011 в 23:20
17
ответ дан user 22 August 2018 в 00:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: