gpt4 book ai didi

javascript - 可选的枚举参数在提供时为假

转载 作者:行者123 更新时间:2023-12-03 00:58:02 30 4
gpt4 key购买 nike

我有一个函数,log,它接受一个可选参数level,它是来自枚举Level的值。它们的定义如下:

enum Level {
Debug,
Information
}

const log = (message: string, level?: Level) => {
if (!level) {
console.warn("The `level` parameter of `log` will no longer be optional in version 1.0.0");
console.log(message);
return;
}

console.log(Level[level] + ": " + message);
};

如您所见,我正在检查 level 是否为假,因为如果他们不提供警告消息,我想记录一条警告消息。

当我像这样调用函数时,它的行为正确:

log("some log message"); // logs the warning

如果我使用 Level.Information,它也会正确运行,但如果我使用 Level.Debug 调用该函数,我会收到警告消息。

为什么会发生这种情况?

最佳答案

“虚假”检查会检查很多事情。仅举几例,它会检查:

  • 该值是否未定义
  • 该值是0吗?

当参数未提供给您的函数时(例如,当您调用 log("foo") 时),level 将为 undefined,因此您的检查行为正确。

但是,在运行时,Level 的定义如下:

{
0: "Debug",
1: "Information",
Debug: 0,
Information: 1
}

这意味着当您调用 log("foo", Level.Debug) 时,该函数实际上会作为 log("foo", 0) 执行。因此,这会通过您的错误检查并记录警告消息。

要解决此问题,请显式与未定义进行比较:

if (level === undefined) {
console.warn("The `level` parameter of `log` will no longer be optional in version 1.0.0");
console.log(message);
return;
}

console.log(Level[level] + ": " + message);

关于javascript - 可选的枚举参数在提供时为假,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52737978/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com