// 논리합(||) 연산자
true || true // true
true || false // true
false || true // true
false || false // false
// 논리곱(&&) 연산자
true && true // true
true && false // false
false && true // false
false && false // false
// 논리 부정(!) 연산자
!true // false
!false // true
// 단축 평가
'Cat' && 'Dog' // “Dog”
논리곱 연산자에서는 두번째 피연산자까지 평가해보아야 표현식을 평가할 수 있기 때문에 'Dog'이 반환된다.
'Cat' || 'Dog' // 'Cat'
논리합 연산자에서는 피연산자 중 하나만 true로 평가되어도 표현식을 평가할 수 있기 때문에 'Cat'이 반환된다.
// 논리합(||) 연산자
'Cat' || 'Dog' // 'Cat'
false || 'Dog' // 'Dog'
'Cat' || false // 'Cat'
// 논리곱(&&) 연산자
'Cat' && 'Dog' // Dog
false && 'Dog' // false
'Cat' && false // false
const obj = null; const myName = obj.name; // TypeError
null로 선언된 변수의 프로퍼티를 참조하려고 해서 타입에러가 발생하고 있다.
&& 연산자의 단축 평가를 사용하면 이러한 에러를 예방할 수 있다.
const obj = null; const myName = obj && obj.name; // 에러가 발생하지 않는다.
console.log(myName); // null
1) obj가 null이면 false로 평가되므로 바로 왼쪽 값인 obj(null)이 할당된다.
2) obj가 null이 아니면 true로 평가되므로 오른쪽의 obj.name 값을 참조한다.
function getName(name){
const yourName = name;
return yourName;
}
getName() 함수 호출 시 name 파라미터에 인수를 전달하지 않았으므로 undefined가 내부적으로 할당된다. → undefined 값을 다른 곳에서 참조할 경우 문제의 소지가 될 수 있다.
|| 연산자의 단축 평가를 사용하면 매개변수의 기본값을 설정할 수 있다.
function getName(name){
const yourName = name || "무명";
return yourName;
};
1) 매개변수 name에 값이 할당된다면 true로 평가되므로 name값을 사용한다.
2) name을 할당하지 않는 경우 name에 undefined가 할당되어 false로 평가 되므로 || 연산자 오른쪽의 "무명"을 사용한다.
if문으로 변숫값을 할당하는 코드이다.
let condition = true;
let result = '';
if (condition) result = '참';
console.log(result); // '참'
단축 평가로 변숫값을 할당하는 코드이다.
let condition = true;
let result = '';
result = condition && '참'; // if문 대신, 단축평가 사용
console.log(result); // '참'
1) condition 값이 true이면, 오른쪽의 '참'이 반환되어 할당된다.
2) condition 값이 false이면, 왼쪽(false) 값이 그대로 반환되어 false가 할당된다.
var x, y, z;
x = 1, y = 2, z = 3; // 3
10 * 2 + 3 // 23
10 * (2 + 3) // 50
typeof '' // "string"
typeof 1 // "number"
typeof NaN // "number"
typeof true // "boolean"
typeof undefined // "undefined"
typeof Symbol() // "symbol"
typeof null // "object"
typeof [] // "object"
typeof {} // "object"
typeof new Date() // "object"
typeof /test/gi // "object"
typeof function () {} // "function"
typeof null // "object"
var foo = null;
console.log(foo === null); // true
typeof undeclared // "undefined"
배운 내용은 점점 많아지지만, 아직 실제로 적용할 수 있는 요소를 배우지 않아서 조금 지루한 감이 있다😒 특히, 활용 예시를 보면 아직 모르는 부분이 많아서 답답하다😣 배운 것들을 활용할 수 있는 새로운 내용을 빨리 접하고 싶다!!🔥