본문 바로가기

복습/Javascript

[Javascript] 객체지향 자바스크립트 [원시 데이터형식, 배열]

# 변수(variable)


  • var 로 선언
  • 변수에 저장된 데이터는 처음 할당된 후 변경 될 수 있음
  • 변수는 대소문자를 구분함
  • 변수는 숫자로 시작할 수 없음


# 연산자(operator)


  • 연산자는 하나 또는 두개의 값을 받아 연산을 수행하고 값을 반환

# 원시 데이터 유형


  • 숫자(Number) : 부동 소수점 숫자와 정수를 포함
  • 문자열(String) : 임의의 개수의 문자로 구성됨
  • 부울(Boolean) : true 또는 false
  • 정의되지않음(Undefined) : 존재하지 않은 변수에 접근하려할 때 undefined를 받음
  • Null : null도 하나의 값임. 값이 없거나 빈 값. undefined 와의 차이점은 null은 정의 되어 있지만 undefined는 정의되어있지않음

                위의 원시 유형에 포함되지 않으면 나머지는 다 객체(Object)


# 값 유형 찾기(typeof 연산자)


  • 숫자(number)
  • 문자열(string)
  • 부울(boolean)
  • 정의되지않음(undefined)
  • 객체(object)
  • 함수(function)

# 8진수(octal number)


  • ES6부터는 접두사(prefix)
            '0o ' 또는 '0O '


# 10진수(decimal number)


# 16진수(hexadecimal number)


  • 접두사 '0x ' 를 사용


# 바이너리 리터럴 (binary literal)


  • ES6이전
            parseInt()  메서드 사용
  • ES6이후
            접두사 '0b ' 사용


# 지수 리터럴


  • 1e1(1e+1 또는 1E+1)은 1뒤에 숫자 0이 있음
            → 10
  • 2e+3은 2뒤에 숫자 0이 세개있음
            → 2000
  • 2e-3은 2앞에 숫자 0이 세개있음
            → 0.002


# 무한대(Infinity)


  • typeof Infinity를 콘솔에 입력하면 "number "
  • 0으로 나누면 Infinity
  • 자바스크립트에서 처리 할 수 있는 수들

                가장 큰 수 : 대략 1e308
                가장 작은 수 : 대략 5e-324
                1e309는 Infinity로 표현
  • 가장 작은 숫자는 -Infinity
  • Infinity - Infinity = NaN (Not a Number)
  • Infinity + Infinity = NaN
  • Infinity 를 피연산자로 사용가능하지만 결과는 Infinity
        
  • isFinite() 는 값이 무한대인지 알려줌
  • ES6에서는 Number.isFinite() 메서드 추가

                왜 Number.isFinite() 를 쓸까?
                        → isFinite()는 Number를 통해 값을 캐스팅하려고 시도하지만 Number.isFinite() 는 그렇지않음


# NaN (Not a Number)


  • 이름은 숫자가아닌데 숫자
  • typeof NaN; 을 하면 "number " 출력
  • 산술연산에 NaN 이 하나라도 있으면 결과는 NaN


  • isNaN() 이라는 전역메서드로 판단가능
  • ES6에는 유사한 메서드인 Number.isNaN() 제공 (전역이아님)
  • isNaN() Number.isNaN() 의 차이점은 평가전 캐스팅 차이
  • 숫자인지 여부를 알려면 polyfill 메서드를 사용

* polyfill 이란?

              폴리필(polyfill)은 개발자가 특정 기능이 지원되지 않는 브라우저를 위해 사용할 수 있는 코드 조각이나 플러그인을 한다. 폴리필은 HTML5 및 CSS3와

      오래된 브라우저 사이의 간격을 메꾸는 역할을 담당한다.

     참고 : http://webdir.tistory.com/328

  • Number.isInteger() 는 숫자가 유한하고 정수이면 true반환


# 문자열


  • 따옴표 안에 아무것도 입력하지않아도(빈공간) 문자열임
  • 기호 '+' 를 이용하여 연결
                
            예) "문자열" + "이다"


  • 산술연산의 피연산자에 " 1 " 과 같이 숫자같은 문자열을 사용하면, 백그라운드에서 문자열은 숫자로 변환
  • 문자열을 숫자로 변환하는 방법

       1 을 곱한다.

        

        parseInt()


  • 숫자를 문자열로 변환하는 방법
                
       ""(빈문자열) 을 연결

        

  • 특수문자

      • ' \ ' 는 이스케이프 문자라서 문자열 내에서 따옴표를 사용하고싶을때 이스케이프처리를 한다
                    예) var str = "I don\'t know";




# 문자열 템플릿 리터럴


  • ES6에 템플릿 리터럴(template literal) 도입
  • 백틱(back-tick) `` 문자로 묶는다
  • 자리표시자(place holder)는 달러기호와 중괄호로 표시 (  ${expression}  )

    예)

    var a = 10;

    var b = 10;

    console.log(`Sum is ${a + b} and Multiplication would be ${a * b}`);





# 태그된 템플릿 리터럴


  • 템플릿 리터럴에 표현식을 프리픽스(prefix)로 사용하면 해당 프리픽스는 호출할 함수로 간주
  • 템플릿 문자열이 태그함수에 전달되면, 두개의 폼이 있음
        1. 백 슬래시가 해석되지 않은 원시(raw)폼
        2. 백 슬래시가 특별한 의미를 갖는 처리된 폼

  예)

      function rawTag(strings, ...substitutes){

        console.log(strings.raw[0])

      }

      rawTag`This is a raw text and \n are not treated differently`




# 부울(Boolean)


  • 따옴표 없이 사용된 truefalse
  • 논리연산자 (logical operator)

                !   → 논리 NOT(부정)
                &&  → 논리 AND(그리고)
                ||  → 논리 OR(또는)


  • 부울이 아닌 값에 논리 연산자를 사용하면 부울로 변환됨 typeof 는 유지
  • false 인 값들

        • 빈 문자열 ""
        • null
        • undefined
        • 숫자 0
        • 숫자 NaN
        • 부울 false



  • AND( && ) 연산자는 모든 피연산자가 true 일 경우에만 true
  • OR( || ) 연산자는 두개의 피연산자중 하나만 truetrue
  • 괄호가 없는 이상 논리연산자의 우선순위는

            !   →   &&  →   ||

  • 우선순위를 결정 하려면 그냥 괄호를 쓰는게 가독성이 좋다
  • 자바스크립트 엔진의 지연평가 (lazy evaluation)

      참고 : 논리연산이 차례로 진행될 때 어느 시점에 명확한 결과가 나온다면 그 이후의 연산은 최종 결과에 영향을 미치지않으므로 수행하지않음

(불필요한 작업을 피한다)

      예)

        var b = 5;

        true || (b = 6);

        true && (b = 6);



  • 논리 연산에서 피연산자로 부울이 아닌 표현식이라면 부울이 아닌 값이 반환

    예)

      true || "something"

      true && "something"

      true && "something" && true



  • 비교연산자(comparison operator)
  1. '==' 동등비교(Equality comparison)

      • 비교하기 전 동일한 유형으로 변환
      • 두 연산자가 같으면 true 반환
      • 느슨한 비교(loose comparison) 이라고도 불림

  2. '===' 동등 및 유형 비교(Equality and type comparison)

      • 백그라운드에서 유형변환이 일어나지 않음
      • 두 연산자가 같고 동일한 유형이면 true 반환(안전성 높음)
      • 엄격한 비교(strict comparison) 이라고도 불림

  3. '!=' 비동등 비교(Non-Equality comparison)

      • 피연산자가 서로 같지 않으면 true 반환

  4. '!==' 유형 변환 없이 비동등 비교(Non-Equality comparison without type conversion)

      • 피연산자가 같지 않거나 유형이 다른 경우 true반환    

  5. '>'
  6.  '>='
  7. '<'
  8.  '<='


    참고 : NaN은 자기 자신을 포함한 어떤 것과도 같지 않다.




# Undefined 와 null


  • 변수를 초기화하지 않고 선언하면 undefined값으로 자동으로 초기화

            선언하지 않은 변수를 typeof 하면 "undefined" 반환
            초기화를 하지않고 선언만 한 변수를 typeof 하면 "undefined" 반환
  • null은 백그라운드에서 할당하지 않음, 코드에서 직접 할당

  • 숫자로 변환

            1 * undefined;

  • NaN으로 변환

            1 * null;

  • 부울로 변환

            !!undefined;
            !!null;


  • 문자열로 변환

            "value : " + null;
            "value : " + undefined;


# 심볼(Symbol)

  • ES6에 새로운 원시유형인 심볼(symbol) 도입 (7번째)

            

  • 심볼을 생성할 때 생성자처럼 new 를 쓰지 않는다

                var atom = Symbol();
                var atom = Symbol('설명기술');


                

  • 고유하고 불변함

                

# 배열(Array)


  • 선언방법 : 대괄호를 사용

            예) var a = [];

  • 배열의 첫번째 index 는 0부터 시작

            (배열의길이 : 0 부터 index - 1 까지)

  • 배열의 index 를 통해 요소 접근 가능하며 변경 가능

            
  • 기존에 존재하지 않는 요소를 추가 할 수 있으며, 간격을두고 추가 할 시엔 undefined 값을 반환

            

  • 요소 삭제시엔 delete 를 사용, 그러나 undefined 로 변경되며 배열의 길이는 유지된다

            

  • 배열 내에 다른배열을 포함시킬 수 있다




  • 문자열도 배열이다
            
        각 문자에 접근 가능