有没有一个专门的函数来检查null和未定义的TypeScript?
由于TypeScript是强types的,所以简单地使用if () {}
来检查null和undefined并不正确。
TypeScript有专门的函数或语法糖吗?
使用一个杂耍检查,你可以在一个命中testingnull
和undefined
:
if (x == null) {
如果使用严格检查,那么对于设置为null
值而言,只有这样,对于未定义的variables,其值才会为真:
if (x === null) {
你可以使用这个例子用不同的值来尝试这个:
var a: number; var b: number = null; function check(x, name) { if (x == null) { console.log(name + ' == null'); } if (x === null) { console.log(name + ' === null'); } if (typeof x === 'undefined') { console.log(name + ' is undefined'); } } check(a, 'a'); check(b, 'b');
产量
“a == null”
“a是未定义的”
“b == null”
“b === null”
我在打字游乐场做了不同的testing:
http://www.typescriptlang.org/play/
let a; let b = null; let c = ""; var output = ""; if (a == null) output += "a is null or undefined\n"; if (b == null) output += "b is null or undefined\n"; if (c == null) output += "c is null or undefined\n"; if (a != null) output += "a is defined\n"; if (b != null) output += "b is defined\n"; if (c != null) output += "c is defined\n"; if (a) output += "a is defined (2nd method)\n"; if (b) output += "b is defined (2nd method)\n"; if (c) output += "c is defined (2nd method)\n"; console.log(output);
得到:
a is null or undefined b is null or undefined c is defined
所以:
- 检查(a == null)是否正确地知道a是否为null或未定义
- 检查(a!= null)是否正确地知道a是否被定义
- 检查是否(a)知道a是否被定义是错误的
TypeScript是否有专门的函数或语法糖
不,我只是做something == null
与JavaScript相同的something == null
。
if( value ) { }
如果值不是:则评估为真:
- 空值
- 未定义
- 为NaN
- 空string(“”)
- 0
- 假
打字稿包括JavaScript规则。
if(data){}
这是数据
- 空值
- 未定义
- 假
- ….
如果您使用的是TypeScript,那么让编译器检查空值和未定义值(或其可能性)是一种更好的方法,而不是在运行时检查它们。 (如果你想在运行时检查,那么尽可能多的答案表明,只需使用value == null
)。
使用编译选项strictNullChecks
告诉编译器扼杀可能的空值或未定义的值。 如果你设置了这个选项,那么在你想要允许null和undefined的情况下,你可以定义types为Type | null | undefined
Type | null | undefined
Type | null | undefined
。
所有,
如果您使用的是对象,那么得票最多的答案并不真实。 在这种情况下,如果一个财产不存在,支票将不起作用。 这就是我们的问题:看到这个例子:
var x = { name: "Homer", LastName: "Simpson" }; var y = { name: "Marge"} ; var z = { name: "Bart" , LastName: undefined} ; var a = { name: "Lisa" , LastName: ""} ; var hasLastNameX = x.LastName != null; var hasLastNameY = y.LastName != null; var hasLastNameZ = z.LastName != null; var hasLastNameA = a.LastName != null; alert (hasLastNameX + ' ' + hasLastNameY + ' ' + hasLastNameZ + ' ' + hasLastNameA); var hasLastNameXX = x.LastName !== null; var hasLastNameYY = y.LastName !== null; var hasLastNameZZ = z.LastName !== null; var hasLastNameAA = a.LastName !== null; alert (hasLastNameXX + ' ' + hasLastNameYY + ' ' + hasLastNameZZ + ' ' + hasLastNameAA);
结果:
true , false, false , true (in case of !=) true , true, true, true (in case of !==) => so in this sample not the correct answer
plunkr链接: https ://plnkr.co/edit/BJpVHD95FhKlpHp1skUE
如果您想要传递tslint
而不将strict-boolean-expressions
设置为allow-null-union
或allow-undefined-union
,则需要使用来自node
的util
模块的isNullOrUndefined
或者滚动您自己的:
// tslint:disable:no-null-keyword export const isNullOrUndefined = <T>(obj: T | null | undefined): obj is null | undefined => { return typeof obj === "undefined" || obj === null; }; // tslint:enable:no-null-keyword
不完全是语法糖,但是当你的tslint规则是严格的时候是有用的。
我总是这样写:
var foo:string; if(!foo){ foo="something"; }
这将工作正常,我认为这是非常可读的。
您可以使用
if(x === undefined)