<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
</body>
<script type="text/javascript">
if (console.log("a")) {
console.log("console.log('a') is True!!");
} else {
console.log("console.log('a') is False!!");
}
</script>
</html>
if문 안의 console.log("a")에 의해 콘솔에 a를 찍는다.
그리고 console.log("a")가 false이기 때문에 if문에서 else를 타고 console.log("console.log('a') is False!!");를 구행하여 콘솔에 console.log('a') is False!!를 찍는다.
왜 console.log("a")가 false일까?
컴퓨터는 binary 언어를 사용한다. 즉, 모든 것은 0 또는 1이고 결국 false 아님 true라는 이야기다.
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
</body>
<script type="text/javascript">
if (true) {
console.log("true is True!!");
} else {
console.log("true is False!!");
}
if (false) {
console.log("false is True!!");
} else {
console.log("false is False!!");
}
if (0) {
console.log("console.log(0) is True!!");
} else {
console.log("console.log(0) is False!!");
}
if (1) {
console.log("console.log(1) is True!!");
} else {
console.log("console.log(1) is False!!");
}
if (2) {
console.log("console.log(2) is True!!");
} else {
console.log("console.log(2) is False!!");
}
if ("a") {
console.log("console.log('a') is True!!");
} else {
console.log("console.log('a') is False!!");
}
if (console.log()) {
console.log("console.log() is True!!");
} else {
console.log("console.log() is False!!");
}
</script>
</html>
콘솔에 찍힌 결과를 보면 알 수 있듯이
false는 false. 즉, 0이다.
true는 true. 즉, 1이다.
0은 false. 즉, 0이다.
1은 true. 즉, 1이다.
2는 true. 즉, 1이다.
"a"는 true. 즉, 1이다.
console.log()는 false. 즉, 0이다.
즉, 숫자는 0은 false고 0을 제외한 모든 숫자는 모두 true다.
문자는 모두 true다.
console.log()는 모두 false다.
for문은 다음과 같은 방식으로 작동한다.
for Loop 자체를 하나의 메인 클래스에 있는 하나의 Sub 클래스 객체가 생성되었다고 생각해보자.
그렇다면 for문은 for문 자기 자신 밖에 있는 전역변수를 Super 클래스의 변수를 사용하듯 사용이 가능하며,
자기 자신이 만든 변수는 자기 자신 내에서만 Sub 클래스 변수를 사용하듯 지역변수로 사용이 가능하다.
그림을 보면 알 수 있듯이 (1)에서 for Loop에 들어가며 처음 값을 생성하고, 이후 '조건 검사 -> logic -> option -> 조건 검사' 과정으로 가는 삼각형 구조를 무한 반복하게된다.
만약 이런 코드를 넣으면 어떻게 될까?
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
</body>
<script type="text/javascript">
for (console.log("a"); console.log("b"); console.log("d")) {
console.log("c");
}
</script>
</html>
생성자 console.log("a")를 실행하고, 조건 검사를 실행한다. console.log("b")를 실행했는데 console.log()는 항상 false라서 for Loop를 종료하게 된다.
즉, 결과는
콘솔에 a, b를 찍은 후 종료가 된다.
만약 이렇게 하면 어떻게 될까?
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
</body>
<script type="text/javascript">
for (console.log("a"); !console.log("b"); console.log("d")) {
console.log("c");
}
</script>
</html>
생성자 console.log("a")를 실행하고, 조건 검사를 실행한다. console.log("b")를 실행했는데 console.log()는 항상 false인데 앞에 !가 붙어서 항상 true가 된다. 그래서 for Loop는 logic을 실행하고, Option으로 간 다음 다시 조건 검사를 실행한다. 역시 또 true가 나온다. 그렇게 삼각형 구조를 무한 반복하게 된다.
즉, 결과는
콘솔에 a, b, c, d, b, c, d, ... 를 무한루프를 돌게 된다.
cf.
자바스크립트에서는 숫자 0은 false, 나머지는 모두 true이다.
하지만 파이썬에서는 숫자 1은 true, 나머지는 모두 false이다.
즉, 모든 컴퓨터에서 0은 false, 1은 true로 약속을 하고 사용하기에 0과 1은 공통된 true, false를 가지게 되지만 그 외의 값들은 언어에 따라 달라지게된다.
'개발자 > Javascript' 카테고리의 다른 글
node.js 접속 쿼리 분해 (0) | 2020.05.14 |
---|---|
Javascript (자바스크립트) for문 369 게임 (0) | 2020.05.10 |
Javascript (자바스크립트) for문 별찍기 (0) | 2020.04.23 |
Javascript (자바스크립트) 로그인 페이지 만들기 (0) | 2020.04.23 |
Javascript (자바스크립트)의 이해 - 두 수 받아서 계산하기 (0) | 2020.04.16 |