Я рассматривал случай, который выглядит следующим образом:
loggedInUser$ = this.select().pipe(
filter(({ user }) => toBoolean(user)),
map(({ user: { firstName: f, lastName: l } }) => `${f} ${l}`)
);
Просто любопытно, можем ли мы всегда заменить !!
вместо этого метода, чтобы получить логическое значение и нет. IIUC семантика всегда будет одинаковой?
Другими словами, мы всегда должны иметь возможность заменить toBoolean(...)
на !!
?
Реализация выглядит так:
// @internal
export function toBoolean(value: any): boolean
{
return value != null && `${value}` !== 'false';
}
Анализ
Таким образом, исходя из ответов, разница в том, что !!
возвращает true для «false», но toBoolean()
возвращает false
для «false».
Это немного субъективно, но лично я чувствую, что лучше сказать пользователям использовать !!
, чем какой-либо другой подход с сахаром, так как сначала мы должны быть знакомы с основами / семантикой Javascript, а затем основываться на них.
Таким образом, если кто-то хочет, чтобы 'false'
было ложным, он должен реализовать это явно. Применение в этом случае будет таким, что чье-то имя на самом деле является «ложным», и мы хотим, чтобы это было правдой.