배열이란 어떤 값들을 순서대로 저장하는, 수학에서 보면 집합과 비슷한 느낌이다.

var fruits = ['apple', 'mongo', 'orange', 'grape', 'banana'];
var array1 = [1 , '3', true];
var array2 = [undefined, "", '', 'undefined', null, false, NaN, 0];

배열 안에 존재하는 'apple'이나 'mongo'와 같은 값들을 element, 요소라고 일컫는다.

 

  • 배열의 길이, length
var array2 = [undefined, "", '', 'undefined', null, false, NaN, 0];

function valueOfLength(x) {
    return x.length
}

console.log(valueOfLength(array2));

전에 배운 length처럼, 배열에서도 length를 통해 배열의 길이(배열 안에 존재하는 요소의 갯수)를 알 수 있다.

 

  • 요소 접근, index
var food = ['pizza', 'burger', 'chicken']
var myFavoriteFood = food[1];

console.log(myFavoriteFood); // 'burger'

var fibonacci = [1, 2, 3, 5, 8, 13];
console.log(fibonacci[4]); // 8
fibonacci[4] = null;
console.log(fibonacci[4]); // null

index를 통해 정해진 위치에 존재하는 요소에 접근할 수 있다. 또한 대입 연산자 '='를 통해 값을 바꿀 수도 있다.

 

  • 요소 추가 및 제거
var arr1 = [];
arr1[0] = true;
console.log(arr1[0]); // true

arr1[2] = true;
console.log(arr1[2]); // true

console.log(arr1); // [true, undefined, true]

단순하게 index와 대입 연산자 '='를 이용해서 요소를 추가할 수 있다.

var arr2 = ['alone'];
console.log(arr2); // ['alone']

arr2.push(1);
console.log(arr2); // ['alone', 1]
arr2.push(NaN);
console.log(arr2); // ['alone', 1, NaN]

arr2.pop();
console.log(arr2); // ['alone', 1]
arr2.pop();
console.log(arr2); // ['alone']

push를 통해 요소를 순서대로 추가할 수도 있고, pop을 통해 요소를 순서대로 제거할 수도 있다.

 

 

 

 

Array Methods : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array#%EB%A9%94%EC%84%9C%EB%93%9C

수학에서 배운 함수는 대개 다음과 같다. f(x) = ax^2 + bx + c

 

자바스크립트도 비슷하다. 하지만 수식이 아닌 우리가 원하는 코드가 들어간다. 만약 내가 두 개의 숫자를 더하는 함수를 만들고 싶다면(a + b와 같은 함수)

function add(a, b) {
	var result = a + b;
	console.log(result);
	return result;
}

add(17, 7); // 24

이렇게 코드를 짜면 된다. 한 가지 눈 여겨 볼 점은 return이다. 앞 전의 학습 내용들에서는 return 구문을 찾아볼 수가 없다. 그래서 웹 브라우저의 console창을 이용해 함수를 실행시키면 마지막 값으로는 항상 undefined가 떴었다. 이는 function이 실행되고 나서 최종적으로 돌려받는 값이 정해져 있지 않았기 때문이다. 하지만 위처럼 return result;와 같이 return 구문을 넣어주면 최종값을 돌려받게 되고 console창도 24가 마지막 값으로 뜨는 것을 확인할 수 있다.

 

function add(a, b) {
	var result = a + b;
	console.log(result);
	return result;
}

위 코드를 실행시켰을 때는 아무런 값도 돌려받지 않는다. 단지 add라는 함수가 어떤 것인지 선언만 했기 때문이다. 함수를 실행시키고 싶다면 add(x, y);와 같이 실행문을 작성해야 한다.

 

  • 중복을 줄여보자
for (let i = 1; i <= 3; i++) {
	console.log(i);
}

for (let i = 1; i <= 5; i++) {
	console.log(i);
}

for (let i = 1; i <= 7; i++) {
	console.log(i);
}

function을 배웠으니 써먹어보자. 위 코드를 보면 비효율적으로 중복을 사용하고 있다. 이러한 중복을 줄여줄 수 있는 것이 function을 사용하는 이유 중 하나다.

 

function repeatLog(count) {
	for (let i = 1; i <= count; i++) {
    	console.log(i);
  	}
}

repeatLog(3);
repeatLog(5);
repeatLog(7);

 

  • Return, 반환
function doSomething() {
    var a = 3;
    var b = 2;
    
    if (a > b) {
        return;
    }

    return 3;
}

var a = doSomething();
console.log(a); // undefined

return은 함수를 종료시킴과 동시에 종료 시 어떤 값을 반환할지 결정해주는 구문이다. 위 코드를 보자면, var a = doSomething();에서 function doSomething이 실행된다. 코드는 기본적으로 위에서 아래로 읽혀 내려오는데 doSomething함수는 return 3;보다 if문을 먼저 만난다. 3 > 2로 조건을 만족해 return;이 실행되는데 이로 인해 return 3;은 실행되지 않고 doSomething 함수가 종료된다. 따라서 return;으로 아무런 값이 반환되지 않았기 때문에 a를 출력해보면 undefined가 나온다.

 

function foo(a, b) {
    if (a < b) {
        return a;
    }
}
const result1 = foo(10, 20);
const result2 = foo(20, 20);

console.log(result1); // 10
console.log(result2); // undefined

 1번. FizzBuzz

 - 1부터 100까지 console.log를 실행한다.

 - 3의 배수는 "fizz"라는 문자열을 로그한다.

 - 5의 배수는 "buzz"라는 문자열을 로그한다.

 - 3과 5의 공배수는 "fizzbuzz"라는 문자열을 로그한다.

 - 나머지 숫자들은 해당 숫자 자체를 로그한다.

for ( var i = 1; i < 101; i++) {
	if ((i%15) === 0) {
		console.log("fizzbuzz", "i의 값 : " + i);
	} else if ((i%3) === 0) {
		console.log("fizz", "i의 값 : " + i);
	} else if ((i%5) === 0) {
		console.log("buzz", "i의 값 : " + i);
	} else {
		console.log(i, "i의 값 : " + i);
	}
}

3과 5의 공배수엔 15 배수의 문자열일 때에는 fizzbuzz가 최우선으로 실행되어야 한다. 따라서 15일 때 조건문을 가장 위에 넣었다. 3과 5가 겹치지 않는 숫자일 때에는 알아서 각자의 경우를 찾아가기 때문에 3과 5의 조건문 위치가 바뀌어도 상관 없다.

 

2번. Biggest Number

 - 가장 큰 수가 출력되도록 해라.

var a = -Infinity;
var b = NaN;
var c = Infinity;

if (a >= b && a >= c) {
    if (a === b && a === c) {
        console.log('가장 큰 수 a = ' + a);
        console.log('가장 큰 수 b = ' + b);
        console.log('가장 큰 수 c = ' + c);
    } else if (a === c) {
        console.log('가장 큰 수 a = ' + a);
        console.log('가장 큰 수 c = ' + c);
    } else if (a === b) {
        console.log('가장 큰 수 a = ' + a);
        console.log('가장 큰 수 b = ' + b);
    } else {
        console.log('가장 큰 수 a = ' + a);
    }
}   else if (b >= a && b >= c) {
    if (b === a && b === c) {
        console.log('가장 큰 수 a = ' + a);
        console.log('가장 큰 수 b = ' + b);
        console.log('가장 큰 수 c = ' + c);
    } else if (b === c) {
        console.log('가장 큰 수 b = ' + b);
        console.log('가장 큰 수 c = ' + c);
    } else if (b === a) {
        console.log('가장 큰 수 a = ' + a);
        console.log('가장 큰 수 b = ' + b);
    } else {
        console.log('가장 큰 수 b = ' + b);
    }
}   else if (c >= a && c >= b) {
    if (c === a && c === b) {
        console.log('가장 큰 수 a = ' + a);
        console.log('가장 큰 수 b = ' + b);
        console.log('가장 큰 수 c = ' + c);
    } else if (c === b) {
        console.log('가장 큰 수 b = ' + b);
        console.log('가장 큰 수 c = ' + c);
    } else if (c === a) {
        console.log('가장 큰 수 a = ' + a);
        console.log('가장 큰 수 c = ' + c);
    } else {
        console.log('가장 큰 수 c = ' + c);
    }
}   else {
        console.log('Is this Number?')
}

가장 큰 수를 고르라면 누구나 당연하게 별 생각 없이 큰 수를 고를텐데, 나의 뇌가 어떻게 이 큰 수를 비교할까를 생각하며 코드를 짜니 조금 머리 아프다.

 

a, b, c 모두 같을 수 있지 않은가! 숫자가 아닌 것이 섞여 있을 수도 있다. a = b = c일 때가 가장 우선 순위로 와야 한다는 것도 생각해야 한다. 안그러면 a = b =c 상황에서 a랑 b만 출력될 수도 있다.

 

별거 아닌 것 같은데도 길게 쓰여졌다... Prep Guide보면 Math.max를 사용하면 간단하단다. 어쨋든 위의 경우는 어떤 수를 대입하더라도, 숫자가 아닌 값을 대입하더라도 적절한 결과를 도출해내는 것을 확인했다.

 

이 또한 중복이 많은데 더 좋은 방법이 있을 것 같습니다. 알려주시면 감사드리겠습니다!

 

3번. Word Position

 - 문장 속에서 단어를 찾고 단어의 처음 Index와 마지막 Index를 출력하라.

var word = ',';
var sentence = 'Hi guys, just call me SeungJun. How are you?';

var first = sentence.indexOf(word);
var second = first + word.length - 1;

if (first === -1) {
    console.log('Sorry, I cannot find it.');
} else if (isNaN(first) === false && isNaN(second) === false) {
    console.log(first, second);
}

찾을 수 없다면 'Sorry, I cannot find it'이라는 문구를 띄우게 했다. 숫자가 아닌 값이 대입되면 에러가 뜬다. 또한 한 자릿수의 글자를 대입하게 된다면 이 또한 적절하게 값이 출력된다. 위의 경우 처럼 ,를 대입하면 7 7이 뜬다.

 

안타깝게도 H를 대입했을 때 두번 째 H의 Index값은 출력되지 않는다...

 

 

 

누군가에겐 간단한 문제이지만 나에겐 조금 생각이 필요한데 풀어나가고 해답이 보이는 과정이 꽤 재밌다! 방해 요소가 없는 한 몰입해서 하게 되고 꼭 풀고 싶어진다. 시간도 엄청 잘 지나간다. 이러한 문제를 푸는 것도 알고리즘의 한 부분일까?

 

내 이름을 영어표기로 나타내면 Shin SeungJun이다.

var name = 'Shin SeungJun'

console.log(name[0]);
console.log(name[1]);
console.log(name[2]);
console.log(name[3]);
console.log(name[4]);
console.log(name[5]);
console.log(name[6]);
console.log(name[7]);
console.log(name[8]);
console.log(name[9]);
console.log(name[10]);
console.log(name[11]);
console.log(name[12]);

내 이름을 이렇게 1자 1자씩 출려하려면 총 13이나 써야 하는데 엄청난 중복이 발생한다. 어질어질하다. 이렇게 중복을 통해 비효율적으로 코드를 짜는 것은 코드를 짜는 시간 뿐만 아니라 코드가 실행되는 시간에도 영향을 끼친다.

 

var name = 'Shin SeungJun';

for (var i = 0; i < name.length; i++;) {
	console.log(name[i]);
}

위와 같이 작성해도 출력되는 것은 맨 위의 코드와 같다. 더 짧고 보기에도 좋다.

 

반복문을 보면 크게 4가지 파트로 나뉜다.

for (1번 파트; 2번 파트; 4번 파트) {
  3번 파트
}

 - 1번 파트 : Initialization, for문의 초기 구동 코드이다. for문에서 '1번'만 실행되고 대체로 변수를 선언할 때 사용된다.

 - 2번 파트 : Conditional, 조건이 들어가는 결정적인 부분이다. 2번 파트의 조건에 맞지 않는다면 for문은 종료된다. 이 2번 파트의 성립 여부는 조건의 결과가 Falsy인지 Truthy인지에 따른다.

 - 3번 파트 : 실행되었으면 하는 코드를 짜는 부분이다.

 - 4번 파트 : Update, 3번 파트가 실행되고 난 후 실행되는 부분이다. 3번 파트가 여러 번 실행된다면 4번 파트 또한 여러번 실행된다. 물론 2번 파트도 매번 조건을 따져줘야 하니 동일하게 여러번 실행된다.

 - 실행 순서 : 1번 -> 2번 -> 3번 -> 4번

 

  • 반복문 중단하기
console.log('before for loop');

for(var i = 1; i < 11; i +=2) {
    if (i === 7) {
    break;
    } else {
    console.log(i);
    }
}

console.log('after for loop');

위의 코드는 기본적으로 1~9까지 숫자 중 홀수만 출력되게 하는 코드이다. 여기서 i가 7일 때 break를 사용하여 for문이 중단되도록 했다. 위의 코드는 1, 3, 5를 출력한다.

 

console.log('before for loop');

for (var i = 1; i < 11; i += 2) {
  if (i === 7) {
    continue;
  }
  console.log(i);
}

console.log('after for loop');

continue는 해당 코드를 건너 뛰고 다음부터 계속해라는 것이다. 즉 i가 7일 때는 건너 뛰고 9일 때는 정상적으로 실행된다. 위의 코드는 1, 3, 5, 9를 출력한다.

 

  • Quiz - 1

 - 반복문을 이용해 이름을 역순으로 출력하라.

var name = 'Shin SeungJun';

for (var i = name.length; ( 0 < i ) && ( i < name.length + 1 ); i--) {
    console.log(name[i-1]);
}

 와 생각보다 시간이 걸렸다.

 

 - 1번 파트에서 0의 index에 위치한 S부터가 아니라 마지막 n에서 시작할 수 있도록 i에 내 이름의 길이를 대입하였다.

 - 2번 파트에서 i는 13인데 단순히 i < name.length라고 해버리면 13보다 크니 조건을 만족하지 못해 for문이 중단된다. 따라서 +1을 해주어야 하는데 대신에 <을 <=으로 바꿔줘도 된다. 그리고 &&을 이용해 두 부등호 조건을 동시에 만족하도록 했다.

 - 3번 파트에서, index는 1이 아니라 0부터 시작하고 length는 1부터 길이를 측정해나가기 때문에 -1을 해주어야 서로 일치된다.

 - 4번 파트에서, 역순이기 때문에 i가 점점 작아져야 된다. 따라서 i--를 넣었다.

 

검색 없이 그냥 생각나는 대로 해본 건데 혹시 더 좋은 방법이 있다면 댓글로 알려주세요! 지식 공유에 감사드리겠습니다!

 

  • Quiz - 2

 - 반복문을 활용해 문자열의 홀수번째 글자만 출력하라.

var name = "0i1a2m3k4e5n";

for (i = 0; i < name.length; i += 2) {
    console.log(name[i], '| 홀수 위치: ' + (i+1));
    
}

의외로 1번보다 쉬웠다.

자바스크립트에서(파이썬이나 다른 프로그래밍 언어에서도 마찬가지일 것이다) 조건이 충족되면 어떤 코드가 실행될 수 있도록 제어할 수 있다.

if (false) {
	console.log("Hello, world");
}

위의 console.log는 실행되지 않는다. ()안에 들어오는 코드가 조건인데, 이미 조건이 false로 전제되어 있기 때문이다. true로 되어 있다면 console.log는 실행된다. 하지만 false와 true로 조건문을 실행하는 것은 무의미하다. false라면 그냥 코드를 안적으면 되는 것이고 true라면 if 없이 쓰면 되기 때문이다.

 

이렇게 if문을 통해서 ()안의 조건이 충족되면 {}의 코드가 실행되도록 할 수 있다. 더 나아가 else if, else를 써서 'A라면 B를 해주세요, 하지만 C라면 D를 해주세요. 이도저도 아니면 E를 해주세요'라는 조금 더 복잡한 조건문을 만들 수 있다.

if (A) {
	B
} else if (C) {
	D
} else {
	E
}

물론 위의 A, B, C, D, E는 아무것도 정의되지 않은 코드이기 때문에 정상적으로 실행되지 않는다. console로 실행해보니 에러가 뜬다.

 

var something = true;
var moreSomething = true;

if (something) {
	console.log("I am inside something");

	if (moreSomething) {
    	console.log("I am inside moreSomething)";
    } else {
    	console.log("I never gets called");
    }
} else {
	console.log("I never gets called either");
}

// 위와 같이 실행할 경우
// I am inside something
// I am inside moreSomething
// 만 출력된다.

이렇게 서로 if문에 if문이 들어가도록 중첩되게 사용할 수도 있다.

 

if (A) {
  // one..
} else if (B) {
  // two..
} else if (C) {
  // three..
} else if (D) {
  // four..
} else if (E) {
  // five..
} else {
  // six..
}

유의할 점으로, 위와 같이 코드를 짰을 때 A랑 C가 true더라도 A 조건의 one만 실행된다. else는 '~~가 아니면 ~~을 해라'라는 뜻이기 때문에, 앞의 것이 true이면 뒤의 것은 실행되지 않는다.

 

  • Quiz
if (true) {
  console.log(1);
} else if (true) {
  console.log(2);
} else {
  console.log(3);
}

if ("") {
  console.log(1);
} else if ("a") {
  console.log(2);
} else {
  console.log(3);
}

if (null) {
  console.log(1);
} else if (5) {
  console.log(2);
} else {
  console.log(3);
}

맨 위의 if문은 맨 처음부터 true이므로 1이 출력된다. 두 번째 if문에서는 처음에는 Falsy값인 ""이 조건으로, false로 인지하기 때문에 두 번째에서 Truthy 값인 "a"가 true로 인식되어 2가 출력된다. 3번째도 마찬가지로 처음에 Falsy값인 null로 인해 false로 인지하여 1이 출력되지 않고 두 번째에서 Truthy값인 5를 true로 인지하여 2가 출력된다.

 

  • Switch

if문과 비슷한 것이 switch문인데 switch문은 case를 사용한다.

var expr = 'Bananas'

switch (expr) {
  case 'Oranges':
    console.log('Oranges are $0.59 a pound.');
    break;
  case 'Apples':
    console.log('Apples are $0.32 a pound.');
    break;
  case 'Bananas':
    console.log('Bananas are $0.48 a pound.');
    break;
  case 'Cherries':
    console.log('Cherries are $3.00 a pound.');
    break;
  case 'Mangoes':
  case 'Papayas':
    console.log('Mangoes and papayas are $2.79 a pound.');
    break;
  default:
    console.log('Sorry, we are out of ' + expr + '.');
}

console.log("Is there anything else you'd like?");

// 위의 코드를 실행할 경우
// 'Bananas are $0.48 a pound.'
// "Is there anything else you'd like?")
// 가 출력된다.

말그대로 해당되는 case를 찾아간다. 

var expr = 'Bananas';
switch (expr) {
  case 'Oranges':
    console.log('Oranges are $0.59 a pound.');
    break;
  case 'Apples':
    console.log('Apples are $0.32 a pound.');
    break;
  case 'Bananas':
    console.log('Bananas are $0.48 a pound.');

  case 'Cherries':
    console.log('Cherries are $3.00 a pound.');
    break;
  case 'Mangoes':
  case 'Papayas':
    console.log('Mangoes and papayas are $2.79 a pound.');
    break;
  default:
    console.log('Sorry, we are out of ' + expr + '.');
}

console.log("Is there anything else you'd like?");

// 'Bananas' case에 break가 빠져있다.
// Bananas are $0.48 a pound.
// Cherries are $3.00 a pound.
// Is there anything else you'd like?
// 가 출력된다.

이 때 주의할 것이 break인데, break를 각 case마다 설정해두지 않는다면 다음 case문이 실행된다.

var expr = 'Pineapple';
switch (expr) {
  default:
    console.log('Sorry, we are out of ' + expr + '.');
  case 'Oranges':
    console.log('Oranges are $0.59 a pound.');
    break;
  case 'Apples':
    console.log('Apples are $0.32 a pound.');
    break;
  case 'Bananas':
    console.log('Bananas are $0.48 a pound.');
    break;
  case 'Cherries':
    console.log('Cherries are $3.00 a pound.');
    break;
  case 'Mangoes':
  case 'Papayas':
    console.log('Mangoes and papayas are $2.79 a pound.');
    break;
}

console.log("Is there anything else you'd like?");

// 위 코드를 실행할 경우
// 'Sorry, we are out of Pineapple.'
// 'Oranges are $0.59 a pound.'
// "Is there anything else you'd like?"
// 가 출력된다.

또 다른 주의점은 default문이다. 아무것도 해당하지 않을 경우 기본적인 문구가 나오도록 설정하는 것인데, 위와 같이 맨 마지막에 위치한 경우가 아닐 경우 defauly문에는 break가 없기 때문에 break를 만나기 전까지의 코드가 실행된다. 따라서 default는 마지막에 넣어주는 것이 좋다.

 

switch 참고 출처 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/switch

  • Truthy and Falsy

자바스크립트에서 7가지로 값을 나누는 기준과 별개로, 다른 기준이 한 가지 더 존재하는데 Truthiness와 Falsiness다. 진실성과 거짓성인데 자바스크립트의 모든 값들은 이 둘 중 한 가지에 속한다.

0
-0
false
undefined
null
""
''
``
NaN

위의 값들은 Falsy이고 그 외의 모든 값들은 Truthy이다. 자바스크립트가 문맥을 파악할 때, false라고 여겨지는 것들이 falsy이다. 위의 값들이 if문의 조건 부분에 들어갈 경우 false를 반환한다.

 

  • Logical NOT Operator
!true; // false
!2; // false
!"abc"; // false
!(function foo () {}); // false
!{ name: 'jun' }; // false

!false; // true
!""; // true
!0; // true

!연산자를 사용할 때, Boolean(true); 혹은 Boolean(2); 등등 ! 뒤에 오는 값으로 Boolean을 실행했을 때 false가 반환된다면, false가 반환된다. Boolean(false); 혹은 Boolean(0);과 같이 false가 반환되는 값들에게 !연산자를 사용하면 true가 반환된다. 값이 뒤바뀐다.

 

  • Logical OR Operator

|| 로 표현된다. true나 false 값이 아닌, 연산되지 않은 값인 피연산자 값이 반환된다.

 

 - 연산방식

1. 연산자를 기준으로 '왼쪽'부터 Truthy 값을 찾는다.

2. Truthy 값을 찾은 경우, 연산을 중지하고 '해당 값'(true나 false가 아닌)을 반환다.

3. 마지막까지 Truthy 값을 찾지 못한 경우, 마지막에 위치한 값을 반환다.

true || true; // 맨 처음인 맨 왼쪽에서 이미 Truthy 값인 true를 찾았기 때문에 해당 값인 true 반환
true || false; // 마찬가지로 맨 처음 Truthy 값을 찾아서 맨 처음 해당 값인 true 반환
false || true; // 두 번째에서 Truthy 값인 true를 찾았기 때문에 두 번째 해당 값인 true 반환
false || false; // 둘 다 Truthy가 아니기 때문에 마지막까지 Truthy를 못 찾은 경우이다. 따라서 마지막에 위치한 값인 false 반환
"hello" || {}; // 맨 처음부터 Truthy 값인 "hello"를 찾았기 때문에 "hello" 반환
[] || "hello" // 맨 처음부터 Truthy 값인 []을 찾았기 때문에 [] 반환
(function foo() {}) || "hello"; // 맨 처음부터 Truthy 값인 function을 찾았기 때문에 function foo() {} 반환
false || ""; // 둘 다 Truthy가 아니기 때문에 마지맊가지 Truthy를 못 찾은 경우이다. 따라서 마지막 값인 ""을 반환

 

  • Logical AND Operator

&&으로 표현된다. 마찬가지로 true나 false 값이 아닌, 연산되지 않은 값인 피연산자 값이 반환된다.

 

 - 연산방식

1. 연산자를 기준으로 '왼쪽'부터 Falsy값을 찾는다.

2. Falsy 값을  찾은 경우, 연산을 중지하고 해당 값을 반환다.

3. 마지막까지 Falsy 값을 찾지 못한 경우, 마지막에 위치한 값을 반환다.

true && true; // 맨 마지막까지 Falsy인 값을 못 찾았기 때문에 마지막 값인 true를 반환
true && false; // 맨 마지막에서 Falsy를 찾았기 때문에 해당 값인 false 반환
false && true; // 맨 처음부터 Falsy를 찾았기 때문에 해당 값인 false 반환
false && false; // 마찬가지로 맨 처음부터 Falsy를 찾았기 때문에 해당 값인 false 반환
"hello" && {}; // 맨마지막까지 Falsy를 못 찾았기 때문에 마지막 값인 {} 반환
[] && "hello"; // 맨마지막까지 Falsy를 못 찾았기 때문에 마지막 값인 "hello" 반환
"" && "hello"; // 맨 처음부터 Falsy를 찾았기 때문에 해당 값인 "" 반환
(function foo() {}) && "hello"; // 맨마지막까지 Falsy를 못 찾았기 때문에 마지막 값인 "hello" 반환
false && ""; // 맨 처음부터 Falsy를 찾았기 때문에 해당 값인 false 반환

 

하나라도 Truthy가 있다면 그 해당 값을 반환하는 것이 OR이고(논리 연산을 할 때 1 OR 1 OR 0 OR 0 하면 값은 1이지 않는가) 하나라도 Falsy가 있다면 그 해당 값을 반환하는 것이 AND라고 생각하면 될 것 같다.(논리 연산할 때 1 AND 1 AND 1 AND 0 AND 1은 1이지 않는가!)

 

눈으로만 볼 때는 이해가 안됐는데 console로 직접 하나하나 실행해보니까 이해가 된다. 내가 생각했던 논리 연산자 NOT, OR, AND랑 달라서 헷갈렸던 것 같다.

'프로그래밍 > 바닐라코딩_Prep Guide' 카테고리의 다른 글

Step 2. JavaScript(5) - for, 반복문  (0) 2021.11.25
Step 2. JavaScript(4) - if, 조건문 + switch  (0) 2021.11.25
Step 2. JavaScript(2)  (0) 2021.11.25
Step 2. JavaScript(1)  (0) 2021.11.24
Step 1. Google Clone  (0) 2021.11.14

+ Recent posts