문자열 타입으로 변환
1. String 생성자 함수를 new 연산자 없이 호출하는 방법

console.log(String(1));        // "1"
console.log(String(NaN));      // "NaN"
  1. Object.prototype.toString 메소드를 사용하는 방법
console.log((1).toString());        // "1"
console.log((Infinity).toString()); // "Infinity"
  1. 문자열 연결 연산자를 이용하는 방법
console.log(1 + '');        // "1"
console.log(false + '');    // "false"

숫자 타입으로 변환
1. Number 생성자 함수를 new 연산자 없이 호출하는 방법

console.log(Number('0'));     // 0
console.log(Number('10.53')); // 10.53
  1. parseInt, parseFloat 함수를 사용하는 방법(문자열만 변환 가능)
console.log(parseInt('-1'));      // -1
console.log(parseFloat('10.53')); // 10.53
  1. + 단항 연결 연산자를 이용하는 방법
console.log(+'10.53'); // 10.53
console.log(+true);    // 1
  1. * 산술 연산자를 이용하는 방법
console.log('-1' * 1);    // -1
console.log(false * 1);   // 0

불리언 타입으로 변환
1. Boolean 생성자 함수를 new 연산자 없이 호출하는 방법

console.log(Boolean('x'));       // true
console.log(Boolean(''));        // false
console.log(Boolean('false'));   // true
console.log(Boolean(NaN));       // false
console.log(Boolean(Infinity));  // true
console.log(Boolean(null));      // false
console.log(Boolean(undefined)); // false
console.log(Boolean({}));        // true
  1. ! 부정 논리 연산자를 두번 사용하는 방법
console.log(!!'x');       // true
console.log(!![]);        // true

단축 평가

// 논리합(||) 연산자
'Cat' || 'Dog'  // 'Cat'
false || 'Dog'  // 'Dog'
'Cat' || false  // 'Cat'

// 논리곱(&&) 연산자
'Cat' && 'Dog'  // Dog
false && 'Dog'  // false
'Cat' && false  // false

프로퍼티
프로퍼티 키(빈 문자열을 포함하는 모든 문자열 또는 symbol 값)와 프로퍼티 값(모든 값)으로 구성
프로퍼티 키에 문자열이나 symbol 값 이외의 값을 지정하면 암묵적으로 타입이 변환
객체는 프로퍼티를 열거할 때 순서를 보장 X

Object 생성자 함수 - new 키워드와 함께 객체를 생성하고 초기화하는 함수, 파스칼 케이스 사용
인스턴스 - 생성자 함수를 통해 생성된 객체

var person = new Object();
// 프로퍼티 추가
person.name = 'Lee';

객체 리터럴을 사용하는 것이 더 간편

var emptyObject = {};

생성자 함수를 사용하면 마치 객체를 생성하기 위한 템플릿(클래스)처럼 사용하여 프로퍼티가 동일한 객체 여러 개를 간편하게 생성 가능
대문자로 시작
this는 생성자 함수가 생성할 인스턴스를 가리킴
생성자 함수 내에서 선언된 일반 변수는 private(외부에서 참조 불가능)

// 생성자 함수
function Person(name, gender) {
  var married = true;         // private
  this.name = name;           // public
  this.gender = gender;       // public
  this.sayHello = function(){
    console.log('Hi! My name is ' + this.name);
  };
}

// 인스턴스의 생성
var person1 = new Person('Lee', 'male');

생성자 함수가 아닌 일반 함수에 new 연산자를 붙여 호출하면 생성자 함수처럼 동작할 수 있다는 것을 의미->일반적으로 생성자 함수명은 첫문자를 대문자로 기술하여 혼란을 방지

delete 연산자를 사용하면 객체의 프로퍼티를 삭제

delete person.gender;

for-in

// prop에 객체의 프로퍼티 이름이 반환된다. 단, 순서는 보장되지 않는다.
for (var prop in person) {
  console.log(prop + ': ' + person[prop]);
}

// index에 배열의 경우 인덱스가 반환된다
for (var index in array) {
  console.log(index + ': ' + array[index]);
}

/*
0: one
1: two
*/

for–of

const array = [1, 2, 3];
array.name = 'my array';

for (const value of array) {
  console.log(value);
}

/*
1
2
3
*/

for–in 문은 객체의 프로퍼티를 순회
for–of 문은 배열의 요소를 순회

object type은 참조 타입 - 객체 자체를 저장하고 있는 것이 아니라 생성된 객체의 참조값을 저장(Pass-by-reference)
원시 타입은 값으로 전달 - 값이 복사되어 전달(Pass-by-value), 값이 한번 정해지면 변경 불가능

// Pass-by-reference
var foo = {
  val: 10
}

bar.val = 20;
console.log(foo.val, bar.val); // 20 20
console.log(foo === bar);      // true

// Pass-by-value
var a = 1;
var b = a;

a = 10;
console.log(a, b);    // 1  10
console.log(a === b); // false
profile
Front-end Developer 💻🔜

0개의 댓글