为什么此方法返回未定义而不是布尔值?

Why is this method returning undefined and not boolean?

我有以下方法

const isPrivate = (input) => {
  return input && input.type && input.type === "private";
}

console.log(isPrivate());

为什么它返回未定义而不是布尔值?

您的 input 变量有问题。该错误只是说 input 未定义,这意味着您从未给它赋值。 Javascript 不会尝试将未定义的值解析为 false,而只会抛出错误。

如果想先检测undefined,改成

return input != null && input && input.type && input.type === "private";

这样它会首先检查它是否为 null,如果有效,则评估为 true 并继续进行下一个计算。

逻辑运算符不强制或 return 布尔值。

!!input 将确保输入是真值,return 是布尔值。 input.type === "private" 也将 return 一个布尔值。由于运算符的两边都计算为布尔值,因此您将得到您期望的值。

const isPrivate = (input) => {
  return !!input && input.type === "private";
}

console.log(isPrivate());
console.log(isPrivate({}));
console.log(isPrivate(''));
console.log(isPrivate({ type: 'public' }));
console.log(isPrivate({ type: 'private' }));

不保证对布尔值输入存在性的评估的强制转换。明确测试存在性。这也使评估的意图更加明确。此外,利用解释器通过反转 === 运算符的比较操作数的顺序来检查意图错误。将 input.type 与文字 "private" 进行比较,解释器不会让错误 ["private" = input.type] 滑动,但 [input.type = [= 就可以了14=]]。最后,使用括号来增强短语描述的显着性的成本非常低。

const isPrivate = (输入) => { return ("undefined" !== 输入类型) && ("undefined" !== 类型input.type) && ("private" === input.type) ; };