超过 foo === undefined的 angular.isdefined有什么好处?
foo === undefined
angular.isdefined
我想不出有什么好处。
在 Javascript 中以任何方式访问一个真正未定义的变量(typeof 除外)都会抛出一个错误。只能对属性使用 Angular.isDefined。例如,这样就可以了:
Angular.isDefined
angular.isDefined(window.obj);
因为 obj 是 window 的未定义属性。
预期行为的例子:
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';}
显然,第一个原因是较低的冗长度,但它也将证明角度,特别是如果函数是内部使用。
就像 Kamrul 说的,有棱有角:
function isDefined(value) { return typeof value !== 'undefined'; }
这意味着“这个变量的类型是未定义的”... ... 在你的例子中,你比较变量的内容是等于未定义的,角度是检查变量的类型。
在 js 中,类型是动态的,所以除非你没有赋值,否则变量没有类型... ... 所以 isDefinition 会告诉你变量声明是否存在,以及这个变量是否有内容。
但是,要小心,因为变量可能是 null,在这种情况下,变量的类型将是 object。
你可以试试这个代码:
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 存在且具有 value. . this value 是一个字符串,所以这是它的类型
C) var 存在但是为 null,类型不能被干扰,所以它的类型是 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)引发一个异常,这样... 你的代码就会失败
当您想要检查变量是否存在并已使用值初始化时,会定义 Use,但是对 null 值要小心,因为 null 是一个对象(定义的 var 也是如此)。
如果你想验证一个变量是否存在并且有任何有效值(所以不是 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 的值(如果定义了 myvar 而不是 null) ,如果没有使用某个值初始化 myvar。
正如@TonyBrasunas 在他的评论中所说,如果 myvar 被赋值为 false,那么“一些 init 值”将被赋值。在使用这个技巧之前要考虑到这一点。
这在函数方面很好,例如:
function split(input, charToSplit) { charToSplit = charToSplit || ' '; return input.split(charToSplit); }
然后默认情况下,你可以用空格分割: Var input = ‘ asd asd’; 分裂 = 分裂(输入) ; [‘ asd’,‘ asd’]
或者... 用另一个字母:
var input = 'asd|asd'; var splited = split(input, '|'); // --> splited= ['asd', 'asd']
我只能猜测,但我认为我的猜测是一个相当好的。
这两个表达式在功能上是等价的:
typeof foo !== 'undefined' angular.isDefined(foo)
后者的好处包括:
1)询问某物是否为 定义比询问某物是否为 不是没有定义要轻松得多。
2) angular.isDefined(foo)可以说比 typeof foo !== 'undefined'少很多“噪音”,因此它能更快地理解正在发生的事情。
angular.isDefined(foo)
typeof foo !== 'undefined'
注意: 这些不是 天啊优越性的参数。我想表达的是我的猜测,为什么 Angular 团队想要创建 angular.isDefined,为什么他们认为它比普通的 JavaScript 更好。
angular.isDefined