angular.isdefined有什么好处?
angular.isdefined
在foo === 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更好。