0

Я столкнулся с некоторыми JS сегодня, что я не понял, а побитовые операции в googling не помогают мне. Может кто-нибудь объяснить ниже?Кодирование Объяснение: переменная set с побитовым символом OR в JavaScript

 function createExcerpt(string, maxLength) { 
      // Set a default value of maxLength of 110 
      maxLength = maxLength | 110; 
      ... 

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

+1

Обычно по умолчанию аргументы сделаны с помощью логического ИЛИ ('' ||) ... учитывая этот комментарий, выглядит как ошибка. Побитовое ИЛИ не будет _not_ «установить значение по умолчанию» – qxz

+0

(Хотя использование '||' для аргументов по умолчанию [не является большой практикой] (http://www.codereadability.com/javascript-default-parameters-with-or- оператор /), несмотря на то, как часто вы его видите) – qxz

ответ

2

Учитывая наличие этого комментария в предыдущей строке, это выглядит как простая опечатка.

Установка по умолчанию, как правило, будет сделано с оператором логическогоor, ||, так что это почти наверняка означало быть:

maxLength = maxLength || 110; 

Однако, это на самом деле плохая идея, так как, если maxLength было установите значение false (например, ноль), оно будет заменено значением по умолчанию. То, что может быть быть тем, чего вы хотите, но это отнюдь не ясно.

я бы, вероятно, выбрать для немного более развернутого но определенно четкому:

if (maxLength === undefined) { maxLength = 110; } 

Он по-прежнему помещается на одной строке, а цель весьма специфичен.

И лучший путь, если у вас есть ES6 доступны для вас, будет использовать аргументы по умолчанию запеченные непосредственно в вызове функции:

function createExcerpt(string, maxLength = 110) { 
    ... 
} 
2

Это определенно ошибка. Логический ИЛИ (||) используется в качестве оператора нулевой коалесценции. Побитовое ИЛИ не будет иметь эффекта, указанного в комментарии. Вы можете протестировать его самостоятельно, выполнив его через некоторые тесты.

110 | 110 = 110 
120 | 110 = 126 
90 | 110 = 126 
null | 110 = 110 
50 | 110 = 126 
200 | 110 = 238 

Вы можете видеть из всего несколько примеров, что результат будет довольно нелогичным для кого-то прохождения «MAXLENGTH» аргумент.

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