webBG - програмисти, машинно обучение, javascript, python, php, питам, говорим, публикации

Неразбиране на логически оператори в конкретна ситуация

Разглеждах кода на друг човек и открих тази конкретна част, в която не разбирам за какво се използват логическите оператори. (Имайте предвид, че все още започвам с JavaScript, но също така направих толкова много проучвания, колкото можах, преди да дойда за вашата помощ.)

const createStream = (options) => {
  const stream = new PassThrough({
    highWaterMark: options && options.highWaterMark || null,
  });
  stream.destroy = () => { stream._isDestroyed = true; };
  return stream;
}; 

Така че, доколкото разбирам, това е функция createStream(options), основно, и тя създава променлива, наречена поток, която е обект stream.PassThrough.

Сега, частта, която малко ме притеснява, е частта highWaterMark: options && options.highWaterMark || null,. Просто не разбирам нищо от това. Знам как да използвам логически оператори в изрази if() например, но това просто няма смисъл за мен и не можах да намеря много онлайн, за да ми обяснят това.

Оценявам всяка помощ, която мога да получа.


  • Това отговаря ли на въпроса ви? Логическите && и || оператори в JavaScript 17.02.2020
  • Това означава, че ако няма налична стойност за options.highWaterMark, задайте стойността на options.highWaterMark на null. Това може да се направи, за да се избегнат неочаквани ефекти от недефинирани променливи. Освен това нулева стойност за options.highWaterMark може да се проверява за другаде в скрипта, за да се определи дали да се покаже или скрие някои свързани елементи в документа. Това означава, че трябва да проверявате само за null, а не за null или undefined. 17.02.2020

Отговори:


1

И &&, и || имат един и същ приоритет на оператор и работете отляво надясно. Така

highWaterMark: options && options.highWaterMark || null,

е еквивалентно на

highWaterMark: (options && options.highWaterMark) || null,

Освен това имайте предвид, че && се разрешава в лявата страна, ако лявата страна е фалшива, в противен случай се разрешава в дясната страна. Така че, ако options е undefined, (options && options.highWaterMark) се преобразува в undefined.

&& е необходим там, защото ако параметърът options не съществува (напр. undefined или null), просто правете

highWaterMark: options.highWaterMark || null,

ще изведе грешка, защото нямате достъп до свойства на undefined или null.

След това, за частта ||: ще се разреши наляво, ако лявата страна е вярна, в противен случай ще се разреши на дясната страна. Така че има два възможни пътя:

// options starts out undefined
  highWaterMark: options && options.highWaterMark || null,
// equivalent to
  highWaterMark: (options && options.highWaterMark) || null,
  highWaterMark: (undefined && options.highWaterMark) || null,
  highWaterMark: undefined || null,
  highWaterMark: null,

Or:

// options starts out as an object
  highWaterMark: options && options.highWaterMark || null,
// equivalent to
  highWaterMark: (options && options.highWaterMark) || null,
  highWaterMark: (options.highWaterMark) || null,
  highWaterMark: options.highWaterMark,

И така, това, което кодът прави, е той

  • проверява дали променливата options е вярна

  • Ако е така, той присвоява свойството highWaterMark на options на свойството highWaterMark на обекта

  • В противен случай той присвоява null на това свойство

Това е еквивалентно на следното:

let highWaterMark;
if (options) {
  highWaterMark = options.highWaterMark;
} else {
  highWaterMark = null;
}
const stream = new PassThrough({ highWaterMark });

Това позволява на обаждащите се на createStream да бъдат от един от тези типове:

createStream();

or

createStream({ highWaterMark: 'foo' });
17.02.2020
  • Благодаря много! Мозъкът ми се стопи за секунда, опитвайки се да разбера какво казахте, но след като анализирах страницата, която ми изпратихте, и се опитах да я разбера, най-накрая успях! 17.02.2020
  • Нови материали

    Създайте разширение за Chrome с помощта на Angular
    Този урок е базиран на манифеста на разширението на chrome версия 3 (MV3), а също и на Angular версия 2+ (2, 3 и...). Ако не сте използвали манифест версия 3, можете да следвате този урок ,..

    За да научите нов език за програмиране, започнете отначало
    Първоначално публикувано на http://www.mberlove.com/blog/a-new-programming-language-starting-over/ Програмистите се гордеят със способността си да усвояват лесно нови умения , разчитайки..

    5 Youtubers на Data Science, които трябва да следвате
    Защото всички можем да се справим с малко продуктивно отлагане Всички сме падали в заешката дупка на Youtube, така че защо да не я направим продуктивна?! Като непрекъснато нарастващ източник..

    Бих казал, че точно това е проблемът с Twitter — това е инструмент на суперпотребител.
    Бих казал, че точно това е проблемът с Twitter — това е инструмент на суперпотребител. По същия начин, по който суперкодерът сочи vim като единствения начин за кодиране, но останалите от нас..

    Основи на Gradio
    Gradio е най-ефективният метод за демонстриране на вашия модел на машинно обучение и разполага с удобен за потребителя онлайн интерфейс, който го прави достъпен от всяко място. Какво прави..

    Илюстрация (GIF) за обяснение на дълбоки конволюционни мрежи (DCNN)
    В света на компютърното зрение най-основният и често срещан алгоритъм за разпознаване на изображения е конволюционната мрежа. С популярността на рамки като tensorflow и pytorch, стана по-лесно да..

    Python Bootcamp — Data Science Day 165
    Python Bootcamp от Giles McMullen-Klein беше абсолютно невероятно. Джайлс има този уникален начин да улови аудиторията си, като същевременно прави съдържанието на курса много интересно...