JavaScript为什么getItem()有两种返回类型?

时间:2018-02-08 20:37:16

标签: javascript function return-value

我目前正在学习基础JavaScript课程,并且有一个例子, 这让我很困惑,因为似乎getItem()函数可以有两种返回类型。

if(!localStorage.getItem('name')) {
  setUserName();
} else {
  var storedName = localStorage.getItem('name');
  myHeading.textContent =storedName;
}

因此,在if条件中,getItem返回true或false,具体取决于是否存在于localStorage中的Item。之后,返回值作为String存储在变量中,以便在网站上输出(在“else”部分中)。我搜索了这个并没有找到任何东西,但也许我搜索错了,所以我很高兴能得到任何帮助。我不知道,如果这段代码足以理解我的意思,但如果有必要,我会稍后发布。

2 个答案:

答案 0 :(得分:2)

getItem返回:

  

包含键值的DOMString。如果密钥不存在,则返回null。

什么是DOMString

  

DOMString是UTF-16字符串。由于JavaScript已经使用了这样的字符串,因此DOMString直接映射到String。

因此,它返回string。字符串(除非它们是空的)被视为"truthy" in JS

  

在JavaScript中,truthy值是在布尔上下文中计算时被视为true的值。所有值都是真实的,除非它们被定义为假(即,除了false,0,"",null,undefined和NaN)。

因此,换句话说,如果它返回一个非空字符串,那么if语句认为它是真的。如果没有,则认为是错误的。

这也意味着您得出的结论,getItem有"两种返回类型"是不正确的。它有一个返回类型,可以评估该类型的真实性。

答案 1 :(得分:0)

<强> Storage.getItem()

  

存储接口的 getItem()方法,当传递密钥名称时,   将返回该键的值。

返回值

包含键值的DOMString。如果密钥不存在,则返回null。

if(!localStorage.getItem('name')) {
  setUserName();
} else {
  var storedName = localStorage.getItem('name');
  myHeading.textContent =storedName;
}

您的代码段将检查本地存储是否包含密钥“名称”的项目。它不会返回布尔值(true / false),而是返回对象本身。如果密钥没有值,它将返回'null'。

localStorage.getItem('name')返回:

  • Null :脚本将执行函数setUserName()
  • 任何值:脚本会将值保存在名为 storedName 的变量下。