developer tip

angular.isdefined의 이점은 무엇입니까?

copycodes 2020. 10. 30. 08:15
반응형

angular.isdefined의 이점은 무엇입니까?


angular.isdefinedover and above 의 이점은 무엇입니까 foo === undefined?

나는 즉시 혜택을 생각할 수 없습니다.


typeof를 제외하고 Javascript에서 어떤 방식 으로든 정의되지 않은 변수에 액세스하면 오류가 발생합니다. 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'; }

즉, "이 변수의 유형이 정의되지 않았습니다"라는 의미입니다 ... 예에서 변수의 내용이 정의되지 않은 것과 같고 angular가 변수의 유형을 확인하는 것을 비교합니다.

js에서 유형은 동적이므로 값을 할당하지 않을 때까지 변수에는 유형이 없으므로 isDefined는 변수 선언이 존재하고이 변수에 내용이 있는지 둘 다 알려줍니다.

그러나 변수가 null 일 수 있으므로주의해야합니다.이 경우 변수의 유형은 객체가됩니다.

이 코드를 시도해 볼 수 있습니다.

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가 존재하고 값이 있습니다.이 값은 문자열이므로이 유형이

c) var가 존재하지만 null 인 경우 유형이 간섭 될 수 없으므로 유형이 객체입니다.

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) raise an exception so... you code will fail

Conclusion

Use is defined when you want to check if a variable exists and has been initialized with a value, but be careful with null values because null is an object (so is a defined var).

If you want to validate that a variable exists and has any valid value (so is not null) you can simple do something like:

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

Another good trick is to init to some value if the var is not defined with ||

myvar = myvar || 'some init value';

The above code takes the value of myvar if is defined and not null and if not init it with some value.

As @TonyBrasunas put on his comment if myvar is evaluated to false, 'some init value' will be assigned. Take this into consideration before using this trick.

This is good in functions, for example:

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

Then by default you can split with whitespaces: var input = 'asd asd'; var splited = split(input); // --> splited = ['asd', 'asd']

Or... with another char:

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

I can only guess but I think my guess is a pretty good one.

These two expressions are functionally equivalent:

typeof foo !== 'undefined'

angular.isDefined(foo)

Benefits of the latter include:

1) It's arguably less of a mental strain to ask whether something is defined than to ask if something is not undefined.

2) angular.isDefined(foo) is arguably a lot less "noisy" than typeof foo !== 'undefined', and therefore it's quicker to grasp what's happening.

Note: These aren't my arguments for the superiority of angular.isDefined. What I'm trying to convey is my guess as to why the Angular team wanted to create angular.isDefined and why they thought it was better than the plain JavaScript alternative.

참고URL : https://stackoverflow.com/questions/27818331/what-is-the-benefit-of-angular-isdefined

반응형