souvenir

[Pre 코스][2. 타입] #NaN의 특징 /2020.04.08 본문

2020년/TIL(Today I Learn)

[Pre 코스][2. 타입] #NaN의 특징 /2020.04.08

풀빵이 2020. 4. 9. 16:17

1. 함수 만들기

if구문을 이용해서 falsy 값 6개만을 true로, 그 외는 false로 반환하는 함수를 만들었다.

function isFalsy(anything) { 
	if (anything === false){ 
    	return true; 
    } else if(anything === undefined){ 
    return true; 
    } else if(anything === NaN){ 
    return true; 
    } else if(anything === ''){ 
    return true; 
    } else if(anything === null){ 
    return true;
    } else if(anything === 0){ 
    return true; 
    }else { return false; 
   } 
  }

 

특이하게도 NaN 값만 인식이 되지 않고 오류가 나와서 이에 대해서 MDN을 통해 더 알아보았다.

2. NaN 값

1) NaN 값의 정의

NaN 은 Not-A-Number(숫자가 아님)을 의미한다.

2) NaN의 특징

NaN은 다른 모든 값과 비교(==, !=, ===, !==)했을 때 같지 않으며, 다른 NaN과도 같지 않다.

=> 여기에서 바로 오류가 나왔다.

NaN 판별

NaN의 판별은 Number.isNaN() 또는 isNaN()을 사용하면 제일 분명하게 수행할 수 있습니다. 아니면, 오로지 NaN만이 자기자신과 비교했을 때 같지 않음을 이용할 수도 있습니다.

NaN === NaN; // false
Number.NaN === NaN; // false 
isNaN(NaN); // true 
isNaN(Number.NaN); // true 
function valueIsNaN(v) { return v !== v; } 
valueIsNaN(1); // false 
valueIsNaN(NaN); // true 
valueIsNaN(Number.NaN); // true

그러나 isNaN()Number.isNaN()의 차이를 주의해야 합니다. isNaN은 현재 값이 NaN이거나, 숫자로 변환했을 때 NaN이 되면 참을 반환하지만, Number.isNaN은 현재 값이 NaN이어야만 참을 반환합니다.

 

isNaN('hello world'); // true
Number.isNaN('hello world'); // false

문제 덕분에

1) NaN의 특징

2) NaN을 판별할 수 있는 함수

3) falsy 값 복습

을 할 수 있었다.

출처)

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/NaN


놀랍게도 모델링에서는 Boolean 값의 특성을 이용해서만 한 줄로 함수를 만들었다.

값이 없거나 0, -0, null, false, NaN, undefined, 빈 문자열 ("")이라면 객체의 초기값은 false가 되기 때문이었다. 정말 간단하게 풀 수 있는 경로도 있었구나. 숲보다는 나무에 집중하다보니 놓친것 같다.

참고)

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Boolean

 

 

 

 

 

 

 

 

 

Comments