Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 November 20

VK

Vladymyr Krasulya in NodeUA - JavaScript and Node.js in Ukraine
источник

GZ

Gleb Zhidovich in NodeUA - JavaScript and Node.js in Ukraine
спасибо за советы
источник

NK

ID:0 in NodeUA - JavaScript and Node.js in Ukraine
источник

DI

Dmytro Ihnatov in NodeUA - JavaScript and Node.js in Ukraine
Когда вакцинировался, а зависимости стали криво
источник

h

hilarion_von_juzefin... in NodeUA - JavaScript and Node.js in Ukraine
Склалася ситуація , що потрібно у функцію передати перший і третій параметр, а для другого - зберегти дефолтне значення
const func = (a, b = 2, c) => `a:${a} | b:${b} | c:${c}`
спробував передати null
func(10,null,30)
'a:10 | b:null | c:30'  —-  але дефолтне значення перезаписується
через undefined спрацювало
func(10,undefined,30)
'a:10 | b:2 | c:30'

чому так і чи є простіше рішення?
источник

RD

Roma Dovhaliuk in NodeUA - JavaScript and Node.js in Ukraine
Питання:
Чи підключаються контролери по шині з ОЗУ?
источник

M

Mark in NodeUA - JavaScript and Node.js in Ukraine
Зроби просто функцію обгортку, яка буде приймати 2 аргументи, і викликатиме твою основну функцію з трьома
источник

M

Mark in NodeUA - JavaScript and Node.js in Ukraine
Перший і третій будуть тими, які отримає обгортка, а другий — дефолтний
источник

M

Mark in NodeUA - JavaScript and Node.js in Ukraine
Якщо потрібне менш костильне рішення, поглянь в бік функціональних бібліотек, по типу ramda. Там є функції, які дозволяють передавати аргументи в довільному порядку
источник

h

hilarion_von_juzefin... in NodeUA - JavaScript and Node.js in Ukraine
поняв, прийняв, спасибі
источник

S

Serhii in NodeUA - JavaScript and Node.js in Ukraine
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters#passing_undefined_vs._other_falsy_values - не всі falsy values будуть перетворюватися на дефолтне значення. Тому, якщо ти очікуєш отримати не лише undefined, то ти повинен або всередині функції це перевіряти, або аргумент, який передається в функцію, перевіряти перед тим.

Нормальне рішення можна написати(мабуть), але якщо топорно:
варіант 1

const func1 = (a, b = 2, c) => {
 // перевірка на undefined and null
 // в принципі, це вбиває сенс дефолтного значення
 const actualB = b ?? 2;
 return `a:${a} | b:${actualB} | c:${c}`;
};

варіант 2

function falsyToUndefined(value) {
 if (!!value === false) {
   return undefined;
 }
}
const func2 = (a, b = 2, c) => `a:${a} | b:${b} | c:${c}`;

function cleanFunc2(a, b, c) {
 return func2(a, falsyToUndefined(b), c);
}
console.log(cleanFunc2(1, null, 2));
источник

S

Serhii in NodeUA - JavaScript and Node.js in Ukraine
тобто ти пропонуєш йому замість того, щоб отримувати парамерт, який може бути дефолтним, а може бути переданим, зробити його просто  const X = 2?
источник

S

Serhii in NodeUA - JavaScript and Node.js in Ukraine
falsyToUndefined не буде правильно працювати з 0, '', etc. Можеш прописати там детальніше, що тобі треба.
источник

M

Mark in NodeUA - JavaScript and Node.js in Ukraine
Так, пропоную
источник

M

Mark in NodeUA - JavaScript and Node.js in Ukraine
Тому що передавати undefined в якості аргументу виглядає як ще більший костиль
источник

M

Mark in NodeUA - JavaScript and Node.js in Ukraine
+ я часто пишу не тільки для ноди, але і для браузерів, а в браузерах дефолтні аргументи не завжди працюють
источник

S

Serhii in NodeUA - JavaScript and Node.js in Ukraine
Функція приймає три параметри. Один з них МОЖЕ мати дефолтне значення. Ти пропонуєш зробити функцію з двома параметрами і забути про третій, перетворивший його на константу. Константа і аргумент з дефолтним fallback значенням - різні речі.
источник

S

Serhii in NodeUA - JavaScript and Node.js in Ukraine
Питання основне було - чому деякі falsy values не заміняються на дефолтний параметр. В МДН це описано.
источник

S

Serhii in NodeUA - JavaScript and Node.js in Ukraine
А ти пропонуєш рішення, яке не вирішує проблему
источник

M

Mark in NodeUA - JavaScript and Node.js in Ukraine
Питання було “чому так і чи є простіше рішення?“
Я запропонував простіше, менш костильне рішення
источник