타입과 변수, 함수 - JeongWu/fe-javascript GitHub Wiki

타입과 변수

자바스크립트

  • 싱글 스레드 이벤트 기반
  • 다중 프로그램 패러다임(함수 기반)
  • 프로토타입 언어
  • 동적 타입 언어: 실행 시점에 변수 타입이 결정

타입

  • 원시형: Number, String, Boolean, null, undefined : 변수에 값 직접 저장
  • 참조형: Object(최상위) : 메모리에 값 저장하고 참조
    • Array, Function, Date 등 네이티브 객체

변수

: 식별자 역할

  • 선언: var 키워드(es6: let, const)
  • 값 할당: = 연산자

연산자

  • ===: 자료형, 값이 모두 같으면 true
  • !==: 자료형, 값 어느 하나라도 같지 않으면 true
  • typeof: 변수형의 자료형 return (null의 typeof : object)
  • !!: 피연산자를 Boolean으로 변환시켜 return
    • falsy value: 0, -0, "", null, undefined, false, NaN
    • truthy value: falsy value 제외한 전부 (빈 배열, 빈 객체)

객체

생성방법

  • 객체 리터럴: var obj={name:"sally"};
  • 생성자 함수: var obj= new Object();

참조

obj.name;
obj["name"]; //key값이 변수나 연산일 때 사용

특징

  • 모든 객체는 Object 객체 상속
  • 참조 가능한 내부 속성을 가지고 있음
  • wrapper 객체: 원시형을 감싸는 객체 (Number, String, Boolean)
  • nested object: 객체 속에 객체가 들어있는 상황
  • 글로벌 객체: 노드 환경- node, 브라우저- window

연산자

  • new: 초기화
  • instanceof: 동일 객체형의 인스턴스인지 판별
  • delte: 객체의 property 제거

garbage collector

  • 글로벌 객체로부터 참조를 통해 닿을 수 없는 객체를 메모리에서 제거

함수

1. 특징

  • 객체 생성(생성자 함수)
  • 일급 객체(Object 상속)
    • 변수의 값, 객체나 배열의 멤버가 될 수 있음
    • 함수의 매개변수나 반환값이 될 수 있음
  • 다형성
    • 함수의 매개변수를 유동적으로 전달하여 오버로딩

2. 정의

  • 함수 선언식: function+ 함수명
function 함수명(매개변수){
...
return 반환값;
}
  • 함수 표현식: 익명함수
var 변수명=function (매개변수){
...
return 반환값;
}
  • 생성자 함수: 익명함수
    new Function("매개변수", "실행 소스코드");
  • 화살표 함수 (ES6)
(매개변수)=>{
...
return 반환값;
}

3. 메서드

객체 내부에 멤버로 존재하는 함수

var obj={
    method1:function(){return 1;},
    method2:()=>{},
    method3:function fn(){},
    method4(){}
};

4. 구조

  • this: 함수를 호출한 주체 객체
    • 함수가 호출될 때 결정
    • call, apply, bind를 통해 변경
  • arguments: 함수 호출 시 전달되는 인수 정보를 배열 형태로 담고 있는 객체
  • prototype: 생성자 함수를 통해 객체 생성했을 때 공통의 속성, 동작이 담겨있는 객체
    • 프로토타입 객체: 인스턴스간 공유
  • __proto__: 본 함수와 연결된 상위 객체의 prototype의 속성과 값을 가진 객체
function Sally(){
    this.dream="지구정복";
}

var sally1=new Sally();

Sally.prototype.weapon="gun"

var sally2=new Sally();

sally2.weapon="bomb"` 

5. 상속

  • 생성자 상속: apply 메서드 사용
  • 프로토타입 상속: 프로토타입 링크 연결
    -> prototype chain
    Sally2.prototype.__proto__=Sally.prototype