为什么此方法返回未定义而不是布尔值?
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) ;
};
我有以下方法
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) ; };