如何检查Typescript中的undefined

时间:2017-05-01 08:19:37

标签: typescript

我正在使用此代码检查未定义的变量,但它无效。



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

if (typeof uemail === "undefined")
{
    alert('undefined');
}
else
{
    alert('defined');
}




12 个答案:

答案 0 :(得分:16)

你可以检查这个真相:

if(uemail) {
    console.log("I have something");
} else {
    console.log("Nothing here...");
}

从这里查看答案:Is there a standard function to check for null, undefined, or blank variables in JavaScript?

希望这有帮助!

答案 1 :(得分:15)

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

let x = foo ?? bar();

相当于检查空值或未定义的值:

let x = (foo !== null && foo !== undefined) ?
    foo :
    bar();

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

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

var uemail = localStorage.getItem("useremail") ?? alert('Undefined');

答案 2 :(得分:14)

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

let uemail : string | undefined;

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

if(uemail === undefined)
{

}

答案 3 :(得分:6)

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

  if (uemail == undefined) {
      alert('undefined');
  } else {
      alert('defined');
  }

  if (uemail == null) {
      alert('undefined');
  } else {
      alert('defined');
  }

答案 4 :(得分:2)

它确实有效,但nullundefined之间存在差异。您实际上正在分配给uemail,它将返回一个值,如果它不存在则返回null。根据{{​​3}}。

有关这两者之间差异的详细信息,请参阅documentation

要获得解决方案,Garfty的答案可能有效,具体取决于您的要求。您可能还想查看this answer

答案 5 :(得分:2)

添加这个迟到的答案以检查在某些情况下可能有用的object.propertie:

使用juggling-check,您可以在一次点击中测试null和undefined:

if (object.property == null) {

如果使用严格检查,则只有设置为null的值才会成立,并且对于未定义的变量不会评估为true:

if (object.property === null) {

Typescript没有检查变量是否定义的函数。

答案 6 :(得分:1)

与打字稿没有严格联系

只需添加以上所有答案,我们还可以使用速记语法

var result = uemail || '';

如果uemail变量具有某个值,它将给您发送电子邮件,如果uemail变量未定义,它将仅返回一个空字符串。

这为处理未定义的变量提供了一种不错的语法,并且还提供了一种在变量未定义的情况下使用默认值的方法。

答案 7 :(得分:1)

我知道这不是最佳和奇怪的例子,但很高兴知道还有另一种方法可以检查是否使用 JSON.stringify

定义了某个值

const foo = '';
const buzz = null;
const fooBuzz = 0;
const array = [];
let declared;
const asUndefined = undefined;

if (JSON.stringify(foo)) {
  console.log(foo); // empty string
} else {
  console.log('undefined');
}

if (JSON.stringify(buzz)) {
  console.log(buzz); // null
} else {
  console.log('undefined');
}

if (JSON.stringify(fooBuzz)) {
  console.log(fooBuzz); // 0
} else {
  console.log('undefined');
}

if (JSON.stringify(array)) {
  console.log(array); // []
} else {
  console.log('undefined');
}

if (JSON.stringify(asUndefined)) {
  console.log(asUndefined);
} else {
  console.log('undefined'); // undefined
}

if (JSON.stringify(declared)) {
  console.log(declared);
} else {
  console.log('undefined'); // undefined
}

答案 8 :(得分:0)

使用'this'关键字访问变量。这对我有用

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

if (typeof this.uemail === "undefined")
{
    alert('undefined');
}
else
{
    alert('defined');
}

答案 9 :(得分:0)

我们可以使用与.Net中相同的三元运算

isUserLoggedIn = service.isUserLoggedIn ? true : false;

它将验证未定义的条件,并将落入第二三元表达式。 三元条件运算符是if条件编码的较好形式,易于使用。

答案 10 :(得分:0)

故事迟了,但我认为有些细节被忽略了?

如果您使用

if (uemail !== undefined) {
  //some function
}

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

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

if (uemail === _undefined) {
  //some function
}

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

true

此测试将返回uemail,因为_undefined现在等于_undefined的值和类型,因为if (typeof(uemail) === 'undefined') { //some function } 现在已正确声明为 undefined类型

另一种方式是

S3_KEY, S3_SECRET, S3_REGION, S3_BUCKET

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

答案 11 :(得分:-6)

在Typescript中,我们可以像这样检查undefined:

The platform in Windows.
Java version is Java 8.