如何检查Typescript中的undefined

pus*_*shp 25 typescript

我正在使用此代码检查未定义的变量,但它不起作用.

var  uemail = localStorage.getItem("useremail");

if (typeof uemail === "undefined")
{
    alert('undefined');
}
else
{
    alert('defined');
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*ter 40

从 Typescript 3.7 开始,您还可以使用无效合并:

let x = foo ?? bar();
Run Code Online (Sandbox Code Playgroud)

这相当于检查 null 或 undefined:

let x = (foo !== null && foo !== undefined) ?
    foo :
    bar();
Run Code Online (Sandbox Code Playgroud)

https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#nullish-coalescing

虽然不完全相同,但您可以将代码编写为:

var uemail = localStorage.getItem("useremail") ?? alert('Undefined');
Run Code Online (Sandbox Code Playgroud)

  • 好答案。我最近也发现了这个??操作员。它简化了代码。但使新手理解以及...操作员变得复杂。 (3认同)

Gar*_*fty 30

你可以检查这个truthy:

if(uemail) {
    console.log("I have something");
} else {
    console.log("Nothing here...");
}
Run Code Online (Sandbox Code Playgroud)

从这里查看答案:是否有一个标准函数来检查JavaScript中的null,undefined或blank变量?

希望这可以帮助!

  • 如果uemail等于零,则等于false,并且它将评估错误. (21认同)
  • 更正此问题,但操作正在使用localStorage.getItem(“ useremail”); 这将返回null。 (2认同)

小智 21

在Typescript 2中,您可以使用Undefined type来检查未定义的值.因此,如果您将变量声明为:

let uemail : string | undefined;
Run Code Online (Sandbox Code Playgroud)

然后你可以检查变量z是否未定义为:

if(uemail === undefined)
{

}
Run Code Online (Sandbox Code Playgroud)

  • 它回答了标题中的问题,这对大多数人来说是比较有帮助的。但是,是的,如果您的目标是检查“localStorage”,那么检查“undefined”可能是错误的方法。 (12认同)
  • 这没有帮助。原始发布者想要检查“localStorage”中是否存在特定值。如果之前未设置该项目,则 `localStorage.getItem()` 返回 `null`。这不能分配给`string | undefined`,因为 `null` 是不同的类型。 (3认同)

FRE*_*CIA 10

添加此迟到的答案以检查在某些情况下可以提供帮助的 object.properie:

使用杂耍检查,您可以一次性测试 null 和 undefined:

if (object.property == null) {
Run Code Online (Sandbox Code Playgroud)

如果使用严格检查,则仅对设置为 null 的值才为真,对未定义的变量不会评估为真:

if (object.property === null) {
Run Code Online (Sandbox Code Playgroud)

Typescript 没有检查变量是否已定义的功能。

2020 年 10 月更新

您现在还可以使用Typescript 中引入的空合并运算符

let neverNullOrUndefined = someValue ?? anotherValue;
Run Code Online (Sandbox Code Playgroud)

在这里,anotherValue只有在someValue为空或未定义时才会返回。


Sam*_*ers 6

它实际上是有效的,但null和之间存在差异undefined。您实际上是在分配给 uemail,如果它不存在,它将返回一个值或 null。根据文档

有关两者之间差异的更多信息,请参阅此答案

对于此 Garfty 的答案的解决方案可能有效,具体取决于您的要求。您可能还想看看这里


Nab*_*ada 6

这是因为它已经为null或未定义。Null或undefined没有任何类型。您可以先检查是否未定义。在打字稿中(null == undefined)是对的。

  if (uemail == undefined) {
      alert('undefined');
  } else {
      alert('defined');
  }
Run Code Online (Sandbox Code Playgroud)

要么

  if (uemail == null) {
      alert('undefined');
  } else {
      alert('defined');
  }
Run Code Online (Sandbox Code Playgroud)

  • 这只正确了一半:1) `null` 和 `undefined` 在 TypeScript 中确实有类型。2) 虽然在这种情况下使用“==”比较有工作逻辑,但“localStorage.getItem()”的返回值绝不会是“undefined”。 (2认同)

mth*_*len 6

编辑:07/2021 正如许多人指出的那样,在 TypeScript 中不再可能重新定义undefined,因此您不太可能遇到这种风险。但在较旧的浏览器中,如果使用 ECMA 5 之前的 JS,则仍然存在这种风险。

如果你使用

if (uemail !== undefined) {
  //some function
}
Run Code Online (Sandbox Code Playgroud)

从技术上讲,您正在将变量uemail与变量进行比较undefined,并且由于后者未实例化,因此默认情况下它将纯粹给出“未定义”的类型和值,因此比较返回 true。但它忽略了名为 的变量undefined实际上可能存在的可能性(尽管不太可能),因此不会是undefined类型。在这种情况下,比较将返回 false。

为了正确起见,必须声明一个未定义类型的常量 ,例如:

const _undefined: undefined
Run Code Online (Sandbox Code Playgroud)

然后通过以下方式进行测试:

if (uemail === _undefined) {
  //some function
}
Run Code Online (Sandbox Code Playgroud)

该测试将返回trueasuemail的值和类型_undefined_undefined现在已正确声明为undefined类型。

另一种方法是

if (typeof(uemail) === 'undefined') {
  //some function
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,布尔返回基于比较两端的两个字符串。从技术角度来看,这不是测试未定义,尽管它达到了相同的结果。

  • 您无法重新定义“undefined”。 (6认同)