변하지 않는 자료형: primitive types
, frozen object
( i.e. object.freeze() )
변할 수 있는 자료형: 기본적으로 js에서는 mutable.
(위의 경우 제외한 대부분)
primitive types
number
, string
, boolean
, null
, undefined
, symbol
, object
, box container
, function
, first-class function
일반 연산하듯이 가능
console.log('my' + 'cat');
console.log('1' + 2); //2가 문자로 변환되어 나옴 출력 = 12
console.log(`string literals: 1+2 = ${1 + 2}`); //백틱 활용
사칙연산, 비교연산, 선-후치 연산은 아는대로.
연산을 효율적으로 처리하기 위해
여러 식들이 있을 경우 참 거짓을 판별할 때
순차적으로 식들을 판별함.
or
은 순차적으로 식을 판별하되, 앞에 하나라도 true
로 판별되면 그 뒤 식은 무시하고 true
를 반환.
위와 비슷한 원리로 and
는 순차적으로 판별하되 앞에서 하나라도 false
가 나오면 그 뒤의 식은 무시하고 false
를 반환.
const value1 = true;
const value2 = 4<2;
console.log(`or: ${value1 || value2 || check()}`);
function check(){
for(let i = 0; i < 10; i++){
console.log('no');
}
return true;
}
// or 연산에 해당하는 구문에서 순차적으로 논리식 확인.
// or은 하나라도 true면 true이기 때문에 앞선 식이 창이라면 굳이 그 뒤에 식의 참.거짓 여부를 판별하지 않음.
//따라서 위의 코드에서는 check함수가 실행되지 않음.
위를 이용해 효율적이게 코드를 짜기 위해서는 보통 단순히 참, 거짓을 나타내는 식은 앞에 두고 expression
이나 function
처럼 조금 자원소모가 필요한 식을 뒤에 배치한다.
//추가로 object의 null 체크를 하고, 안전하게 object의 변수 값을 받아올 때
if(nullableObject != null){
nullableObject.something;
}
//이런식으로 해야하지만 간편하게 and연산을 이용하여
//nullableObject && nullableObject.something 이런식으로 null체크를 할 수 있다.
//3. equality
const stringFive = '5';
const numberFive = 5;
// == loose equality, with type conversion
console.log(stringFive == numberFive);
//true
console.log(stringFive != numberFive);
//flase
// === strict equality, no type conversion
console.log(stringFive == numberFive);
//false
console.log(stringFive != numberFive);
//true
loose equality는 느슨하게 string 5와 숫자 5의 비교도 형변환을 해서 판별해준다.
하지만 strict 'use strict'로 봤듯이 꼼꼼하게(type까지 포함해서) 판별해준다.
//object equality by reference
const ellie1 = {name: 'ellie'};
const ellie2 = {name: 'ellie'};
const ellie3 = ellie1;
console.log(ellie1 == ellie2); //false 1과 2의 reference가 다름.
console.log(ellie1 === ellie2); //false
console.log(ellie1 === ellie3); //true 1과 3의 3이 1의 reference value를 받았기 떄문에 true;
//equality - puzzler
console.log(0 == false); //true
console.log(0 === false); //false
console.log('' == false); //true
console.log('' === false); //false
console.log(null == undefined); // true
console.log(null === undefined); // false
문법: (조건식
? 참일 경우 실행
: 거짓일 경우 실행
)