typeof! ==“undefined”vs.! = null
정의되지 않은 매개 변수 등을 확인하는 JavaScript 코드가 종종 있습니다.
if (typeof input !== "undefined") {
// do stuff
}
형식 조회와 문자열 비교가 포함되어 있기 때문에 다소 낭비 적입니다. undefined
이름을 바꿀 수 있기 때문에 필요합니다 .
내 질문은 :
이 코드는이 접근법보다 나은 방법입니다.
if (null != input) {
// do stuff
}
내가 아는 한 재정의 할 수 없으므로 null
예기치 않게 중단되지 않습니다. 그리고, !=
연산자 의 타입 강제 때문에 , 이것은 당신이 원하는 것 (예를 들어 선택적 함수 매개 변수) undefined
과 null
정확히 같은 것을 모두 검사합니다 .
그러나이 형식은 널리 퍼져있는 것처럼 보이지 않으며, 악의 !=
연산자 를 사용하는 것에 대해 JSLint가 사용자에게 소리 지르기도합니다 .
이것이 왜 나쁜 스타일로 간주됩니까?
typeof
식별자가 전에 선언 된 적이 없기 때문에 더 안전합니다.
if(typeof neverDeclared === "undefined") // no errors
if(neverDeclared === null) // throws ReferenceError: neverDeclared is not defined
변수를 var
키워드, 함수 인수 또는 전역 변수로 선언 하면 가장 좋은 방법은 다음과 같습니다.
if (my_variable === undefined)
jQuery는 그것을 수행하므로 나에게 충분합니다 :-)
그렇지 않으면를 typeof
피하기 위해 사용해야 합니다 ReferenceError
.
undefined가 재정의 될 것으로 예상되면 다음과 같이 코드를 래핑 할 수 있습니다.
(function(undefined){
// undefined is now what it's supposed to be
})();
또는 void
연산자 를 통해 얻습니다 .
const undefined = void 0;
// also safe
좋은 방법 :
if(typeof neverDeclared == "undefined") //no errors
그러나 가장 잘 보이는 방법은 다음을 통해 확인하는 것입니다.
if(typeof neverDeclared === typeof undefined) //also no errors and no strings
정의되지 않은 이름이 바뀌는 것에 대해 걱정할 필요가 없습니다. 누군가가 정의되지 않은 이름을 바꾸면 검사가 실패하는 것보다 몇 가지 문제가 더 많습니다. 코드를 실제로 보호하려면 다음과 같이 IFFE (즉시 호출 된 함수 표현식)로 코드를 래핑하십시오.
(function($, Backbone, _, undefined) {
//undefined is undefined here.
})(jQuery, Backbone, _);
브라우저 환경에서 전역 변수 (이미 잘못된)로 작업하는 경우 다음과 같이 undefined를 확인합니다.
if(window.neverDefined === undefined) {
//Code works
}
전역 변수는 창 개체의 일부이므로 문자열로 캐스팅하고 문자열을 비교하는 대신 정의되지 않은 변수를 간단히 확인할 수 있습니다.
무엇보다 변수가 정의되지 않은 이유는 무엇입니까? 변수 존재를 확인하고 그에 따라 몇 가지 작업을 수행하는 많은 코드를 보았습니다. 이 접근법이 올바른 곳을 한 번도 보지 못했습니다.
정의되지 않은 재정의가 정말로 걱정된다면 다음과 같은 도우미 메소드를 사용하여 이것을 막을 수 있습니다.
function is_undefined(value) {
var undefined_check; // instantiate a new variable which gets initialized to the real undefined value
return value === undefined_check;
}
이것은 누군가가 글 undefined = "foo"
을 쓸 때 이름 undefined
이 새로운 값을 참조하도록 허용하지만 실제 값은 변경하지 않기 때문에 작동 undefined
합니다.
void 연산자를 사용하여 정의되지 않은 값을 얻을 수도 있습니다.
if (input !== void 0) {
// do stuff
}
(그렇습니다. 다른 대답에서 언급했듯이 변수가 선언되지 않으면 오류가 발생하지만이 경우 코드 검사 또는 코드 리팩토링 (예 : window.input !== void 0
전역 변수 테스트 또는 추가 var input
) 으로 배제 될 수 있습니다 .
(typeof input !== 'undefined')
이 시나리오에서 기본 기능 매개 변수를 제공하는 데 실제로 사용되는 경우 실제로 나왔습니다 .
function greet(name, greeting) {
name = (typeof name !== 'undefined') ? name : 'Student';
greeting = (typeof greeting !== 'undefined') ? greeting : 'Welcome';
return `${greeting} ${name}!`;
}
greet(); // Welcome Student!
greet('James'); // Welcome James!
greet('Richard', 'Howdy'); // Howdy Richard!
ES6는 다음과 같이 기본 기능 매개 변수를 도입하는 새로운 방법을 제공합니다.
function greet(name = 'Student', greeting = 'Welcome') {
return `${greeting} ${name}!`;
}
greet(); // Welcome Student!
greet('James'); // Welcome James!
greet('Richard', 'Howdy'); // Howdy Richard!
이것은 첫 번째 옵션보다 덜 장황하고 깨끗합니다.
function greet(name, greeting) {
name = (typeof name !== 'undefined') ? name : 'Student';
greeting = (typeof greeting !== 'undefined') ? greeting : 'Welcome';
console.log(greeting,name);
}
greet(); // Welcome Student!
greet('James'); // Welcome James!
greet('Richard', 'Howdy'); // Howdy Richard!
//ES6 provides new ways of introducing default function parameters this way:
function greet2(name = 'Student', greeting = 'Welcome') {
// return '${greeting} ${name}!';
console.log(greeting,name);
}
greet2(); // Welcome Student!
greet2('James'); // Welcome James!
greet2('Richard', 'Howdy'); // Howdy Richard!
(function(){
var a= b = 3;
var ed = 103;
})();
//console.log(ed); //ed is not defined
console.log("a defined? " + (typeof a !== 'undefined')); //no define
console.log("b defined? " + (typeof b !== 'undefined')); //yes define
console.log(typeof(b)); //number
console.log(typeof(4+7)); //number
console.log(b); //3
console.log(typeof("4"+"7")); //string
var e= "ggg";
console.log(typeof(e)); //string
var ty=typeof(b);
console.log(ty); //number
console.log(typeof false); //boolean
console.log(typeof 1); //number
console.log(typeof 0); //number
console.log(typeof true); //boolean
console.log(typeof Math.tan); //function
console.log(typeof function(){}); //function
if(typeof neverDeclared == "undefined") //no errors
if(typeof neverDeclared === "undefined") //no errors
//if(neverDeclared == null) //showing error
console.log(typeof {a:1}); //object
console.log(typeof null); //object
console.log(typeof JSON); //object
console.log(typeof Math); //object
console.log(typeof /a-z/); //object
console.log(typeof new Date()); //object
console.log(typeof afbc); //undefined
//console.log(typeof new);//error
document.write("<br> * oprator as math ");
var r=14*"4";
document.write(r);
document.write("<br> + oprator as string ");
var r=14+"44";
document.write(r);
document.write("<br> Minus Operator work as mathematic ");
var r=64-"44";
document.write(r);
document.write("<br>");
console.log(typeof(4*"7")); //returns number
console.log(typeof(4+"7")); //returns string
Interview Question in JavaScript
var bar = null;
console.log(typeof bar === "object"); //true yes
//because null a datatype of object
var barf = "dff";
console.log(typeof barf.constructor);//function
console.log(Array.isArray(bar));//falsss
console.log((bar !== null) && (bar.constructor === Object)); //false
console.log((bar !== null) && (typeof bar === "object")); // logs false
//because bar!==null, bar is a object
console.log((bar !== null) && ((typeof bar === "object") || (typeof bar === "function"))); //false
console.log(typeof bar === typeof object); //false
console.log(typeof bar2 === typeof undefined); //true
console.log(typeof bar3 === typeof undefinedff); //true
console.log(typeof bar2 == typeof undefined); //true
console.log((bar !== null) && (typeof bar === "object") && (toString.call(bar) !== "[object Array]")); //false
if (input == undefined) { ... }
잘 작동합니다. 물론 null
비교는 아니지만 일반적으로 undefined
와 를 구별 해야하는 경우 null
실제로는 실제로는 undefined
거짓 값 을 구별해야 하므로
else if (input) { ... }
그렇습니다.
프로그램이 재정의되면 undefined
어쨌든 그것은 정말 두뇌입니다.
내가 생각할 수있는 유일한 이유는 이해하지 못했다, IE4 호환성을 위해이었다 undefined
(불행하게도, 실제로 키워드 아니다) 키워드를하지만, 물론 값이 수 일 undefined
이 있어야했다, 그래서 :
var undefined;
위의 비교는 잘 작동합니다.
두 번째 예에서 보푸라기를 행복하게하려면 이중 괄호가 필요합니까?
참고 URL : https://stackoverflow.com/questions/2703102/typeof-undefined-vs-null
'Programing' 카테고리의 다른 글
OS X : Linux의 wget에 해당 (0) | 2020.02.15 |
---|---|
가변 구조체는 왜 "악"입니까? (0) | 2020.02.15 |
vim에서 어떻게 매치를 욕심없이 만들 수 있습니까? (0) | 2020.02.15 |
mysql2 설치 오류 : gem 기본 확장을 빌드하지 못했습니다 (0) | 2020.02.15 |
Swift 4 모드에서 Swift 3 @objc 유추는 사용되지 않습니다. (0) | 2020.02.15 |