JavaScript null 검사입니다.
다음 코드를 발견했습니다.
function test(data) {
if (data != null && data !== undefined) {
// some code here
}
}
저는 자바스크립트에 익숙하지 않지만, 제가 여기서 읽은 다른 질문들로부터, 저는 이 코드가 별로 의미가 없다는 인상을 받았습니다.
다음 이외의 컨텍스트에서 정의되지 않은 변수에 액세스하면 오류가 발생합니다.typeof
.
업데이트: 위의 (의) 답변이 오해의 소지가 있을 수 있습니다."미정의 변수"가 아니라 "미정의 변수"로 표시되어야 합니다.
제가 알아낸 바와 같이, Ryan ♦, 마에릭스 및 의 거의의 답변에서는 함수에 인수가 제공되지 않더라도 인수에 대한 변수는 항상 선언됩니다.이 사실은 또한 아래 목록의 첫 번째 항목이 틀렸다는 것을 증명합니다.
제가 알기로는 다음과 같은 시나리오가 발생할 수 있습니다.
함수가 인수 없이 호출되어 생성되었습니다.data
되지 않은 변수, 정되지및오발에 합니다.data != null
.함수는 다음과 같이 구체적으로 호출되었습니다.
null
(또는)undefined
), 으로서, 이 에는 , , , , 이 경우에는.data != null
내부 하여 이미내보있습다니고호를 렌더링합니다.&& data !== undefined
쓸모 없는.는 null이 아닌되었으며, 이 경우 null은 null과 null을 합니다.
data != null
그리고.data !== undefined
.
Q: 제가 이해한 것이 맞습니까?
파이어폭스의 콘솔에서 다음을 시도해 보았습니다.
--
[15:31:31.057] false != null
[15:31:31.061] true
--
[15:31:37.985] false !== undefined
[15:31:37.989] true
--
[15:32:59.934] null != null
[15:32:59.937] false
--
[15:33:05.221] undefined != null
[15:33:05.225] false
--
[15:35:12.231] "" != null
[15:35:12.235] true
--
[15:35:19.214] "" !== undefined
[15:35:19.218] true
저는 그 사건을 알아낼 수가 없습니다.data !== undefined
data != null
쓸모가 있을지도 모릅니다.
variable"은 " variable" .undefined
.
정의되지 않은 변수:
var a;
alert(b); // ReferenceError: b is not defined
이 값있 는변수인 undefined
:
var a;
alert(a); // Alerts “undefined”
함수가 인수를 취할 때, 그 값이 다음과 같더라도 그 인수는 항상 선언됩니다.undefined
그러면 오류가 발생하지 않습니다.당신 말이 맞아요!= null
에 뒤에!== undefined
하지만 쓸모가 없습니다.
스크트서에립자바,null
는 "값 없음" 신호를 보내는 데 유용한 특수 싱글톤 개체입니다.를 해볼 수처럼 를통수있으테며할, 자크립서것사처럼는하용일로반으에적트비교바해스트스▁to▁the것,처▁you럼▁practice,===
혼동되는 유형의 강제를 방지하기 위한 연산자:
var a = null;
alert(a === null); // true
@rynah가 언급했듯이, 자바스크립트에서 "정의되지 않음"은 약간 혼란스럽습니다.그러나, 테스트는 항상 안전합니다.typeof(x)
는 "변수가 입니다. "x" 선 "x" 변 " sigma " 문 " 니 " 다 " 입 " 열 " 자 " 가 " 는 " 도 " 에 " 우 " 경 " 가 " 된 " 아 " 닌 " 수 " 언 " " " ▁the " 다 "
alert(typeof(x) === 'undefined'); // true
또한 변수가 초기화되지 않은 경우 "정의되지 않은 값"을 가질 수 있습니다.
var y;
alert(typeof(y) === 'undefined'); // true
이 모든 것을 종합하면, 수표는 다음과 같아야 합니다.
if ((typeof(data) !== 'undefined') && (data !== null)) {
// ...
그러나 변수 "data"는 형식 함수 매개변수이므로 항상 정의되므로 "type of" 연산자를 사용할 필요가 없으며 "undefined value"와 직접 안전하게 비교할 수 있습니다.
function(data) {
if ((data !== undefined) && (data !== null)) {
// ...
이 스니펫은 "만약 함수가 null이 아닌 정의된 인수로 호출되었다면.."
에는 사자의경을 사용합니다.data==null
이고 정의되지 않음 - 두행/에 초점을 . null은 null-undefined입니다
function test(data) {
if (data != null) {
console.log('Data: ', data);
}
}
test(); // the data=undefined
test(null); // the data=null
test(undefined); // the data=undefined
test(0);
test(false);
test('something');
모두 표시됩니다(src).
한다면
(부정!=)
(부정!==)
Q: 인수 없이 함수가 호출되어 데이터가 정의되지 않은 변수가 되고 데이터에 오류가 발생했습니다!= null.
A: 네.data
정의되지 않음으로 설정됩니다.섹션 10.5 규격의 선언 바인딩 인스턴스화를 참조하십시오.그러나 정의되지 않은 값에 액세스해도 오류가 발생하지 않습니다.당신은 아마도 이것을 오류를 유발하는 엄격한 모드에서 선언되지 않은 변수에 액세스하는 것과 혼동하고 있을 것입니다.
Q: 이 함수는 인수로 null(또는 정의되지 않음)을 지정하여 호출되었으며, 이 경우 data!= null이 이미 내부 코드를 보호하고 &&data!== 정의되지 않음을 렌더링합니다.
Q: 함수가 non-prefix 인수를 사용하여 호출되었으며, 이 경우 != null 및 data!== defined를 모두 사소한 방식으로 전달합니다.
A: 맞습니다.다음 테스트는 동등합니다.
data != null
data != undefined
data !== null && data !== undefined
섹션 11.9.3 참조 추상적 동등성 비교 알고리즘과 섹션 11.9.6 규격의 엄격한 동일성 비교 알고리즘입니다.
typeof foo === "undefined"
는 와다다와 .foo === undefined
절대 그들을 혼동하지 마세요.typeof foo === "undefined"
당신이 정말로 필요로 하는 것입니다.또한, 사용하기!==
신에를 !=
그래서 그 진술은 다음과 같이 쓸 수 있습니다.
function (data) {
if (typeof data !== "undefined" && data !== null) {
// some code here
}
}
편집:
당신은 수없다니습할을 사용할 수 .foo === undefined
선언되지 않은 변수의 경우.
var t1;
if(typeof t1 === "undefined")
{
alert("cp1");
}
if(t1 === undefined)
{
alert("cp2");
}
if(typeof t2 === "undefined")
{
alert("cp3");
}
if(t2 === undefined) // fails as t2 is never declared
{
alert("cp4");
}
일반적으로 기대하지 않는 값에 대해 변수를 테스트하는 것은 좋은 생각이 아니라고 생각합니다.왜냐하면 테스트는 금지된 값의 블랙리스트를 작성하는 것으로 간주할 수 있기 때문입니다.하지만 여러분이 모든 금지된 값들을 나열하는 것을 잊는다면 어떨까요?누군가, 심지어 당신조차도 예상치 못한 값을 전달함으로써 당신의 코드를 해독할 수 있습니다.따라서 보다 적절한 접근 방식은 화이트리스트와 같은 것입니다. 즉, 예상치에 대한 변수만 테스트하는 것이지 예상치 않은 값을 테스트하는 것이 아닙니다.예를 들어, 데이터 값이 다음 대신 문자열이 될 것으로 예상하는 경우:
function (data) {
if (data != null && data !== undefined) {
// some code here
// but what if data === false?
// or data === '' - empty string?
}
}
다음과 같은 작업을 수행합니다.
function (data) {
if (typeof data === 'string' && data.length) {
// consume string here, it is here for sure
// cleaner, it is obvious what type you expect
// safer, less error prone due to implicit coercion
}
}
테스트를 수행하는 간단한 방법은 다음과 같습니다.
function (data) {
if (data) { // check if null, undefined, empty ...
// some code here
}
}
var a;
alert(a); //Value is undefined
var b = "Volvo";
alert(b); //Value is Volvo
var c = null;
alert(c); //Value is null
언급URL : https://stackoverflow.com/questions/16672743/javascript-null-check
'programing' 카테고리의 다른 글
Spring Boot이 시작되면 "메소드 이름은 토큰이어야 합니다" 예외가 발생합니다. (0) | 2023.07.26 |
---|---|
변수가 PD인지 테스트하는 방법.NaT? (0) | 2023.07.26 |
트랜잭션 주석 오류 (0) | 2023.07.21 |
현재 세션에서 Oracle 트리거를 사용하지 않도록 설정할 수 있습니까? (0) | 2023.07.21 |
관계형 데이터베이스에서 성능 문제를 어떻게 설명합니까? (0) | 2023.07.21 |