Search

반응형

'Software/JavaScript'에 해당되는 글 38건

  1. 2022.02.01 [왕초보]자바스크립트 논리 표현식 이해하기. &&, ||, ! [[논리연산자]]
  2. 2021.11.07 [왕초보]자바스크립트의 데이터 타입, 문자열 타입 이해하기.
반응형

신기한 연구소입니다.

일반적으로 논리 연산자인 &&, ||, !는 조건문에서 둘 전부 참 또는 거짓이거나

둘 중 하나가 참 또는 거짓인 경우를 판별해서 활용하곤 했습니다.

그럼 꼼꼼히 잘 확인해 보고 기본 개념도 파악하고 활용할 수 있는 응용력도 키워보겠습니다.

 

 

1. && (논리 AND) 연산자.

&&를 사이에 두고 양쪽에 피연산자를 평가해서 둘 다 true이면 결과로 true가 나옵니다.

예를 들어볼께요.

1
2
3
4
5
6
var a = true, b = true, c = false;
 
console.log(a && b);
console.log(a && c);
console.log(c && b);
console.log(c && c);
cs

결과.

1
2
3
4
true
false
false
false
cs

 

Boolean 값을 할당받은 변수 a, b, c로 테스트를 해 봅니다.

3번 라인을 보면 a = true, b = true로 둘 다 true이기에 결과 1번 라인을 보면 true가 나옵니다.

4번 라인부터 6번 라인까지 보면 false값을 가진 변수 c가 들어가 있습니다.

결국 둘 중 하나 또는 둘 다 false인 경우는 && 논리 연산자는 false를 반환하게 됩니다.

&&를 사이에 둔 양쪽의 피연산자는 boolean값을 할당받은 변수뿐만 아니라

관계 표현식, 객체 프로퍼티, 함수 등 truthy, falsy 값의 형태로 변환된다면 모두 가능합니다.

 

1
2
3
4
var a = true, b = true, c = false;
var d = function () { return true; };
 
console.log(a && d());
cs

위 코드를 보면 d에 함수를 할당했습니다.

true를 리턴하는 이 함수를 논리 연산에 피연산자로 사용했습니다.

결과는 true가 반환됩니다.

 

피연산자로 true/false인 불리언 값 외에도 truthy와 falsy로 불리언 값으로 평가될 수 있다면

모두 가능합니다.

 

우리가 false로 평가되는 값은 다음과 같습니다.

false로 평가되는 falsy들...

undefined.
null.
0 또는 -0.
'' 또는 "".
NaN.
그리고 정확한 false

위 falsy들은 false로 평가되며 논리 연산자에서 피연산자로 사용이 가능합니다.

만약 두 변수가 값이 할당된 경우에만 다음 문장을 실행해야 하는 경우라면

다음 예제를 확인해 봅니다.

 

1
2
3
4
5
6
var age = 20;
var fname = "james";
 
if (age && fname) {
    console.log("Your age is ", age, " and name is ", fname);
}
cs

변수 age와 fname을 논리 연산자를 사용해서 평가하고 있습니다.

age와 fname은 Boolean 값이 아니지만 평가가 됩니다.

null, undefined 등 falsy 평가가 아니면 truethy라 true로 평가되어 문제없이

if {} 문이 실행이 됩니다.

하지만 age 또는 fname에 값이 할당이 안되면

undefined로 기본 할당되기 때문에 falsy 평가로 false가 되므로 

if {} 문은 실행되지 않게 됩니다.

 

&& (AND) 연산자의 특징 중 하나는 첫 번째 피연산자를 평가한 뒤 true인 경우만

두 번째 피연산자를 평가합니다.

단순히 생각하면 그렇구나 하겠지만

이를 응용한다면 조건식을 대신해서 간단하게 함수를 실행할 수 있습니다.

 

1
2
3
4
5
6
7
var chk = true;
 
function test() {
    return console.log('test');
}
 
chk && test();
cs

위 예제를 보면

chk가 true이면 7번 라인의 논리 표현식은 test() 함수를 실행합니다.

test() 함수가 true/false로 평가되는 것은 의미가 없고

단지 chk가 true이면 test() 함수를 실행시킬 수 있다는 것이 중요합니다.

chk가 false라면 함수 test()는 실행되지 않습니다.

두 피연산자가 true인지 false인지가 중요한 것이 아니라

첫 번째 피연산자를 평가해서 두 번째 피연산자를 실행하도록 구현한 것입니다.

if문을 대신해서 사용했다는 부분이 흥미롭습니다.

 

2. || (논리 OR) 연산자.

&&(AND)와 마찬가지로 이 논리 연산자도 두 개의 피연산자를 평가합니다.

다른 점은 둘 중 하나만 true이면 된다는 것입니다.

우선 첫 번째 피연산자를 평가합니다.

그리고 false가 나온다면 두 번째 피연산자를 평가합니다.

즉, 첫 번째 피연산자가 true가 된다면 두번째 피연산자를 평가할 이유가 없습니다.

이미 둘 중 하나가 true임을 만족하기 때문입니다.

우리가 생각하는 SQL 문의 A 또는 B라서 둘 다 적용하는 개념이 아닌

첫번째 피연산자를 Boolean으로 평가하는 형식입니다.

또한 표현식을 평가만 하지 않고 실행을 하고 평가를 한다는 부분이 중요합니다.

다음 예를 보겠습니다.

 

1
2
3
4
5
6
var mainObj;
var subObj = "apple";
 
var obj = mainObj || subObj || "lemon";
 
console.log(obj);
cs

||(OR) 연산자를 사용해서 값을 할당하는 방법을 확인해봅니다.

4번 라인의 obj에 값을 할당하는 방식을 보면

mainObj가 true이면 그 값을 할당하고 뒤 2개의 표현식은 실행하지 않습니다.

하지만 undefined로 falsy로 평가되어 false가 되기에 

두 번째 피연산자를 확인합니다.

subObj에 "apple"이 할당되어 있으므로 truthy가 되고 obj에 "apple"가 할당됩니다.

그리고 그다음 피연산자는 실행되지 않습니다.

마지막 "lemon"은 두 번째 피연산자가 true이기 때문에 평가되지 않습니다.

 

이렇게 값을 할당할 때 유용하게 사용할 수 있겠네요.

가끔 공통 js를 보면 첫 라인에 객체를 체크하는 부분이 있는데요.

var obj = obj || {};

obj객체가 있으면 obj객체를 사용하고 처음이면 빈객체 {}를 만든다는 의미입니다.

 

3. !(NOT) 연산자

! 은 피연산자 앞에 놓입니다.

피연산자는 하나이며 피연산자의 true/false를 반대로 바꾸는 역할을 합니다.

먼저 피연산자를 truthy/falsy로 평가하고 그 결과를 boolean인 true/false로 변환합니다.

그리고 반전을 시키는 구조입니다.

! 연산자는 결과가 항상 true/false 중 하나가 됩니다.

주의할 점은! 연산자를 사용할 때 식 전체를 적용할 경우는 ()를 사용해합니다.

!(a == b)

만약 어떤 truthy 또는 falsey 값을 true 또는 false값으로 바꾸고 싶다면

var a;

a = !!a; 로 하면 false로 할당됩니다.

와우~

반응형
반응형

안녕하세요. 신기한 연구소입니다.

여러 가지 책을 보니 시간이 많이 부족하다는 생각이 드네요.

그래도 읽을 책이 많다는 건 행복한 일이 아닐까 싶네요.

오랜만에 자바스크립트 책을 펴 봅니다.

이제 하나씩 끝장을 내야지 짬짬 펴서 읽으니 기억이 가물거리네요.

이번 포스팅은 자바스크립트의 문자열 타입에 대해 알아봅니다.

보통 프로그래밍 언어는 문자열을 다룰 수 있습니다.

자바스크립트도 문자열을 당연히~ 다루겠지요?

어떻게 잘 다루면 되는지 같이 살펴보겠나이다.

 

문자열이란? 바로 여러분이 생각하는 바로 그 글자들입니다.

한글, 영어, 한자어 등등 다양한 언어들과

숫자, 기호 등 문자로 표현할 수 있는 모든 것일 말하는 것이랍니다.

유니코드 문자로 웬만한 문자는 모두 표현이 가능합니다. ( UTF-16)

 

문자열 샘플을 같이 볼께요.

 

1
2
3
4
5
var str1 = "My name is Double quotation String\n";
var str2 = 'My name is Single quotation String\n';
var str3 = `My name is Backtick String`;
 
alert(str1 + str2 + str3);
cs

문자열은 무엇으로 감싸줘야 합니다.

보통 Doublic Quitation (")을 사용하지만

자바스크립트는 무려 3가지를 지원합니다.

", ', `로 Doublic Quotation, Single Quotation, BackTick 이 세 가지입니다.

 

이렇게 문자열을 감싸지 않고 변수에 할당을 하면

그 문자열을 변수로 인식하고 할당되지 않았다면 오류가 발생됩니다.

 

다음 예제로 확인해 봅니다.

경고 라인이 나타나 마우스를 올려보니

'str' 이름을 찾을 수 없습니다. 'str1'을(를) 사용하시겠습니까? 

라는 문구가 보입니다.

 

그렇다면 실제로 다음과 같은 출력을 문자열에 넣고 싶다면

어떻게 해야 할까요?

그는 어제 "난 엄청 배가 고프다고"라고 말했다.

또는, 

그녀는 방금 '이 상황을 어찌 해결할까'라고 생각했다.

 

이렇게 문자열 안에 " 또는 '를 넣고 싶다면

다음과 같이 사용하면 된다.

 

1
2
3
4
var str1 = '그는 어제 "난 엄청 배가 고프다고" 라고 말했다.\n';
var str2 = "그녀는 방금 '이 상황을 어찌 해결 할까?'라고 생각했다\n";
 
alert(str1 + str2);
cs

주의할 점은 " " 안에는 ''로 ' ' 안에는 " "로 써야 오류가 발생하지 않는다.

당연한 거 아닌가?

사실 자바는 문자열을 String이라는 객체 형태로 사용하지만

자바스크립트의 문자열은 원시형 타입니다.

또한 값을 바꿀 수 없는 타입이다.

무슨 의미일까?

반응형