반응형
자바스크립트 스터디를 진행하면서 아래와 같이 정리 중이다.
3강 정리
- 변수선언 let
- 자바스크립트에서 변수를 선언할때는 ES6 이후로이전에는 var 를 사용해서 변수를 선언했지만
- var hoisting 문제가 발생하기에
- let 하나만 존재한다
- (hoisting promlem?)선언한 함수의 위치가 최상단이든 최하단이든실행되기전에 함수안에 필요한 변수값들을 모두 모아var 은 호이스팅이되는데
- let 은 안된다 라고 알면될듯하다
- 최상단에 선언하는것
- (블록스코프제외)
- 호이스팅이란?
- ES6 에선 let 만 사용하기로 약속var 은 블록스코프가 적용이 안됩니다
- 더이상 var 을 사용하지말라고 하네요 ㅎㅎ
- 블록스코프란?{ } 안에서 선언한 변수를 호출하면var 은 호출이됩니다
- 호출이 안되야하는데
- { }안에 변수를 선언하고 { } 밖에서
- Ecma Script 6 란 자바스크립트 표준화를 위한 약속들을 의미한다
- 예시 코드
// 2.variable // let ES6 에서 추가된 문법 let globalName = 'global name' { let name = 'jungwon' console.log(name) name = 'james' console.log(name) console.log(globalName) // 블록밖에서 선언한 변수는 출력안됨 } console.log(name) // 블록안에서 선언한 변수는 출력이 안된다 console.log(globalName)
- 값이 변하지 않는 constants
- 변하지 않는 데이터타입을 선언할때 사용선언한 변수의 데이터값을 변경할수있지만
- let 같은경우 변수를 선언하고
- const 로 선언하면 값을 변경하지못한다
- const = immutable 하다
- 예시코드
// 3. constants // 변하지않는 데이터 타입을 선언할때 사용 // 장점에 대해 조사 const notChangeData = 7; const maxNumber = 10; console.log(notChangeData) console.log(maxNumber) notChangeData = 1 maxNumber = 5 console.log(notChangeData) console.log(maxNumber)
- Variable Types
- 변수의 타입들은 어떤언어든
- primitive, object 타입들로 구분이된다
- 자바스크립트의 경우 function 이라는 타입도 존재
- Number Type
- 저는 c언어나 Java 를 경험해보지못햇지만각각의 타입마다 할당하는 bytes 의 값도 다르다고합니다그로인한 속도저하나 상승 이롭거나 해로운 점이 존재한다고합니다
- bytes 값이 다를경우 메모리에 할당하는 데이터의 용량도 다르며
- c, java 에서는 number 타입에도 여러가지가 있으며
- 자바스크립트에선 위에서 언급한 내용과는달리정수, 소수점으로 이뤄진 정수 든 모두 다 Just Number 일뿐
- 만약에 Ts 를 사용하던들 그냥 타입지정을 number 라고 해주면됩니다
- number 타입 하나만 존재합니다
- number type 의 결과중 무한한 수가 나올경우는 infinity 라는 값이 리턴되고 숫자가 아닌 값이 나올경우는 숫자가 아니라는 값 NaN 이 리턴
- 예시코드
// number type const count = 10 // 정수 const size = 10.1 // 소수점 console.log(`value : ${count}, type : ${typeof count}`) console.log(`value : ${size}, type : ${typeof size}`) const infinity = 1 / 0 // 무한한값이 나올경우 const negativeInfinity = -1 / 0 // 음수인 무한한값 const nAn = 'not a number' / 2 // 숫자가아닌 타입을 나눌경우 console.log(infinity) console.log(negativeInfinity) console.log(nAn)
- String Type
- 말그대로 문자열인 타입을 나타낼때 씁니다말그대로 문자열일뿐...
- 추가적인 내용이없어서 MDN 에 들어가서 Refernce 할만한 자료들을 찾아봤지만
- 예시코드
// string type const char = 'c' const jungwon = 'jungwon' const sayHi = 'hi' + jungwon console.log(`value : ${sayHi}, type : ${typeof sayHi}`) const sayHello = `hello ${jungwon}` console.log(`value : ${sayHello}, type : ${typeof sayHello}`)
- Symbol Type
- 심볼 타입은 let 과 동일하게 ES6 때 추가된 타입입니다
- 예시코드에서는 특정 키값을 생성할때 사용했는데
- 알고보면 심볼은 클래스나 객체타입에서만 사용가능합니다
- 심볼은 자바스크립트 런타임환경내에서 Symbol()
- 함수를 호출하여 생성할수있고 동적으로 익명의 고유한 키값을 만듭니다
- 두개의 심볼을 같은함수로 호출해도
- 런타임환경내에선 서로 값과 타입이 다르다고 말하고있습니다
- symbol 은 new 연산자를 사용하지않습니다
- .for 는 해당 키로 저장된 symbol 이 없으면 새로운 symbol 을 만들고.for 를 통해 생성된 symbol 은 키값이 존재
- 그냥 symbol 을 사용해서 만든 symbol 은 키값이 존재하지않습니다
- 저장된 symbol 이 있으면 해당 symbol 을 반환합니다
- 예시코드
// Symbol { const symbol1 = Symbol('id') const symbol2 = Symbol('id') console.log(symbol1 === symbol2) const symbol3 = Symbol.keyFor(symbol1) console.log(symbol3) // undefined } // 블록스코프로 나타낸이유는 위아래 선언한변수명이 겹친다고해서 // 불가피하게 블록스코프로 설정 const symbol1 = Symbol.for('id') const symbol2 = Symbol.for('id') console.log(symbol1 === symbol2) const symbol3 = Symbol.keyFor(symbol1) console.log(symbol3) // id console.log(`value : ${symbol1.description}, type : ${typeof symbol1}`)
- Dynamic Typing
- 자바스크립트는 동적타입의 언어입니다 변수의 타입지정없이 (c 나 Java 처럼) 값이 할당되는 과정에서 자동으로 변수의 타입이 바뀌거나 결정됩니다 즉 변수는 고정된타입이 없습니다 같은변수에 여러타입의 값을 자유롭게 할당가능합니다
- 이과정에서 error 가 발생할수도있습니다 이를 막기위해 Type Script 를 사용합니다
- 예시코드
// 다이나믹 타이핑 타입스크립트를 사용하게된 계기랄까 let text = 'hello' console.log(text.charAt(0)) // h 인덱스의 순서는 항상 0 부터 스트링이니깐 가장앞에꺼 console.log(`value : ${text}, type : ${typeof text}`) text = 1 console.log(`value : ${text}, type : ${typeof text}`) text = '7' + 5 // 스트링에 5를 더한다는걸 인지 그냥 스트링 + 스트링으로 바꾸버림 console.log(`value : ${text}, type : ${typeof text}`) text = '8' / '2' // 스트링 8에 스트링 2를 나눈다고? 아마 그럼 숫자를 나누겟지 하고 number타입으로 바꿔버림 console.log(`value : ${text}, type : ${typeof text}`) // console.log(text.charAt(0)) // 중간에 number 타입으로 바뀌엇기에 인덱스 순서를 메길수없음
- Object
- Boolean, Number, BigInt, String, Symbol, Object 모두 다 모두 Objcet 타입의 인스턴스들이라고 합니다 null 과 undefined 는 인스턴스가 아니라고 합니다
- 객체는 변수라고합니다 객체에는 많은값이 포함될수있습니다
- 객체는 {} 표기로 만듭니다
- 객체는 각각의 key/value 에 대한 정보를 나열합니다
- key 는 문자열 또는 기호여야합니다
- value 는 모든 유형이 가능합니다
- 한쌍의 key/value 뒤에 ,(쉼표) 를 이용하여 그뒤에오는 key/value 와 구분해야합니다
객체는 사실상 엄청난 설명이 필요하지만 엘리님의 드림코딩에선
키밸류로 이뤄져있고 const 로 선언한 변수의 값은 변경못하지만
해당 변수의 key/value 의 값은 변경가능하다고 설명하는것같습니다
객체에 대해 더 궁금하신분은
밑에 Ref 자료 에서 확인하시면 좋을것같습니다
내용이 방대하여 못적습니다
반응형
'개발자 > WEB' 카테고리의 다른 글
MySQL 8.0 과 JDBC 연결하기 (0) | 2021.01.07 |
---|---|
파이썬 요청에서 보안 인증서 확인 비활성화 방법 (0) | 2021.01.07 |
크롤링 스크레이핑 study 중 필요한 지식 정리 (0) | 2020.04.28 |