为什么 if (undefined) 评估为真?
Why is if (undefined) evaluating to true?
我是 JavaScript 的新手,遇到了一个明显的问题。
const item = sessionStorage.getItem('item'); // undefined
if (item) {
return item;
}
在 Chrome 调试器中,我可以看到该项目返回为 undefined。我希望条件失败。令我惊讶的是,它的评估结果为真。
我以为我已经测试过了。为什么它会在条件语句中返回为真?
我遇到过其他检查,例如 How to check for "undefined" in JavaScript? 推荐的检查。但是...为什么我什至需要远程 'complex' 做任何事情来进行这样的简单检查?上面的方法看起来很简单很优雅,舍不得丢掉。
我也在 https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage 上的示例中看到了这种方法。
您不是从 sessionStorage 中获取值 undefined
,而是字符串 "undefined"
,它与任何其他非空字符串一样真实。
我知道您没有得到值 undefined
,因为那是不可能的。 sessionStorage.getItem
只能 return 一个字符串或 null
。另请注意 setItem
会将其参数强制转换为字符串,因此 sessionStorage.setItem('item', undefined)
将 item 设置为字符串 "undefined"
.
如果您想删除一个项目,您应该使用 sessionStorage.removeItem('item');
而不是将其设置为 undefined
。
我是 JavaScript 的新手,遇到了一个明显的问题。
const item = sessionStorage.getItem('item'); // undefined
if (item) {
return item;
}
在 Chrome 调试器中,我可以看到该项目返回为 undefined。我希望条件失败。令我惊讶的是,它的评估结果为真。
我以为我已经测试过了。为什么它会在条件语句中返回为真?
我遇到过其他检查,例如 How to check for "undefined" in JavaScript? 推荐的检查。但是...为什么我什至需要远程 'complex' 做任何事情来进行这样的简单检查?上面的方法看起来很简单很优雅,舍不得丢掉。
我也在 https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage 上的示例中看到了这种方法。
您不是从 sessionStorage 中获取值 undefined
,而是字符串 "undefined"
,它与任何其他非空字符串一样真实。
我知道您没有得到值 undefined
,因为那是不可能的。 sessionStorage.getItem
只能 return 一个字符串或 null
。另请注意 setItem
会将其参数强制转换为字符串,因此 sessionStorage.setItem('item', undefined)
将 item 设置为字符串 "undefined"
.
如果您想删除一个项目,您应该使用 sessionStorage.removeItem('item');
而不是将其设置为 undefined
。