angular.isdefined有什么好处?

angular.isdefinedfoo === undefined之上和之上有什么好处foo === undefined

我不能马上想到一个好处。

在Javascript中以任何方式访问真正未定义的variables,除了typeof引发错误。 你只能使用Angular.isDefined的属性。 例如,这将工作正常:

 angular.isDefined(window.obj); 

因为obj是一个不确定的窗口。

预期行为的例子:

 var foo; var bar = 42; typeof foo !== 'undefined'; // false typeof bar !== 'undefined'; // true typeof baz !== 'undefined'; // false angular.isDefined(foo); // false angular.isDefined(bar); // true angular.isDefined(baz); // ReferenceError 

这里是来源:

 function isDefined(value) {return typeof value !== 'undefined';} 

显然,第一个原因是较低的冗长度,但它也是未来certificate的angular度,特别是如果内部使用该function。

就像Kamrul所说的那样:

 function isDefined(value){return typeof value !== 'undefined';} 

这意味着“这个变种的types是未定义的”…在你的例子中,你比较variables的内容是等于未定义的,angular正在检查variables的types。

在js中,types是dynamic的,所以直到你没有赋值,variables没有types…所以isDefined会告诉你们两个,如果一个variables声明存在,并且这个variables有任何内容。

但是,要小心,因为variables可能是空的,在这种情况下,variables的types将是对象。

你可以试试这个代码:

 var a; var b='asd'; var c=null; console.log('a: '+typeof a); console.log('b: '+typeof b); console.log('c: '+typeof c); console.log('d: '+typeof d); 

你会看到在控制台中的下一个:

 a: undefined b: string c: object d: undefined 

所以,

a)var存在但没有值,所以未定义

b)var存在且有值。这个值是一个string,所以这是它的types

c)var存在但是为null,types不能被干扰,所以它的types是object

d)这个var还没有被声明,所以它是未定义的

重点是“a”和“d”之间的区别…所以请尝试下一个:

 console.log('a is undefined? ' + a===undefined); console.log('d is undefined? ' + d===undefined); 

您将在控制台中看到下一个:

 false Uncaught ReferenceError: d is not defined 

这是一个大问题,因为:

a)告诉你,这不是不确定的

d)提出exception,所以…你的代码将会失败

结论

当你想要检查一个variables是否存在并且已经用一个值进行了初始化时使用被定义,但是由于null是一个对象(因此是一个已定义的variables),所以要小心空值。

如果你想validation一个variables是否存在并有任何有效的值(所以不是null),你可以简单地做一些事情:

 if(myvar){ console.log('myvar is defined and is not null'); }else{ console.log('myvar is undefined or null'); } 

另一个好的诀窍是如果var不是用||定义的,则初始化一些值

 myvar= myvar || 'some init value'; 

上面的代码如果定义了myvar的值,并且不是null,并且如果没有,则用一些值初始化它。

这在function上很好,例如:

 function split(input, charToSplit){ charToSplit= charToSplit || ' '; return input.split(charToSplit); } 

那么默认情况下你可以用whitspaces分割:var input ='asd asd'; var splited = split(input); // – > splited = ['asd','asd']

或者…与另一个字符:

 var input= 'asd|asd'; var splited= split(input,'|'); // --> splited= ['asd','asd'] 

我只能猜测,但我想我的猜测是一个很好的。

这两个expression式在function上是等同的:

 typeof foo !== 'undefined' angular.isDefined(foo) 

后者的好处包括:

1)问一个问题是否被定义,而不是问一个问题是不是未定义的,这可以说是精神压力的问题。

2) angular.isDefined(foo)可以说比“ typeof foo !== 'undefined' “吵闹”less很多,因此掌握所发生的事情更快。

注意:这些不是angular.isDefined的优越性的angular.isDefined 。 我想传达的是我的猜测,为什么Angular团队想创buildangular.isDefined以及为什么他们认为这比普通的JavaScript替代scheme更好。