본문 바로가기

javascript

#1

출처 : https://www.youtube.com/watch?v=ZOVG7_41kJE&t=3722s

 

- 세팅하기 

영상을 보고 node.js는 따로 다운 받지 않아도 되고

vscode에서 extension에서 code runner와 Live server만 다운로드 한 후

console.log('Hello World');

오류 발생...

zsh: command not found : node 

엄청난 구글링을 통해 node.js 설치가 안 되어서 생긴 오류라는 것을 알았다.

 

터미널에서 Node.js 설치 확인

node -v

command not found: node 오류 확인됨 -> Node.js가 설치 되지 않은 것

 

Node.js설치 (Homebrew 사용)

brew install node

(엄청나게 많은 문장들이 출력되면서 설치..)

 

vscode를 재시작 하니 정상적으로 Hello World 출력..!

 

- 주석(comment) 작성

C++을 먼저 공부한 나로서는 주석 다는 법은 동일 했다.

// 코멘트 작성 방법 첫번째

 

개신기하다고 생각한건 코멘트 작성 두번째 방법이었다..

/**을 입력하면 자동적으로

/** */ 처럼 뒤에 별슬래시가 생성되고

/** 여기 가운데에서 엔터를 누르면

* 이런식으로 자동으로 중간에도 *이 생긴다.

* 주석을 길게 달 수 있다.

*/


- Variable 선언

1) var - 이제는 더이상 잘 쓰지 않는다.

2) let

-> let과 var로 변수 선언하면 추후에 값 변경 가능

var name = '스누피';
console.log(name);

name = '찰리';
console.log(name);

let age = 20;
console.log(age);

age = 33;
console.log(age);

출력 :

스누피

찰리 -> 바뀐 변수 값으로 출력

20

33 -> 바뀐 변수 값으로 출력

 

3) const

-> const으로 변수 선언하면 선언한 변수의 값을 바꿀 수 없다.

const job = '대학생';
console.log(job);

job = '개발자';
console.log(job);

출력 :

대학생

오류발생

 

선언과 할당

1) 변수를 선언하는 것

2) 할당

var area = '서울';
console.log(area);

var을 이용하여 변수 area를 선언하고

area에 서울이라는 값을 할당한 것

let food;
console.log(food);

출력 : 

undefinded

 

let을 이용하여 변수 food를 선언했지만 값을 할당하지 않았기 때문에 undefined 출력

* 할당 하지 않은 변수의 초기값은 undefined

 

+ const은 변수의 값을 수정할 수 없으므로 무조건 변수 선언을 할 때 값을 할당 해야한다.


- Naming Conventions 1

1) 일반적으로 영어(라틴문자)를 사용하면 문자와 숫자를 모두 사용할 수 있다.

2) 특수기호는 언더스코어와 달러를 사용할 수 있다

      ex) _girl, $boy

3) 숫자로 이름을 시작할 수 없다

      ex) 1Name, 2Hello

4) 키워드는 변수명으로 사용할 수 없다.

      ex) var const = 'var';

 

- Naming Conventions 2 -> 개발자들의 암묵적인 약속?과 비슷

1) camelCase -> 대부분의 언어에서 많이 사용

2) snake_case -> 파이썬같은 언어에서 사용

3) PascalCase -> C# 마이크로소프트 계열의 언어에서 사용


- Data Types

여섯개의 Primitive Type / 한개의 오브젝트 타입

1) Number(숫자) 타입

const height = 160;

console.log(typeof height);

출력 : number

 

2) String(문자열) 타입

const bird = '참새';

console.log(typeof bird);

 

출력 : string

 

+ Template Literal

1. newline -> \n

2. tab -> \t

3. 백슬래시를 스트링으로 표현하고 싶다면 두번 입력

const backSlash = '스누피\\찰리';

console.log(backSlash);

출력 : 스누피\찰리

 

++ 출력값에 따옴표를 포함하고 싶다면

const smallQutoation = '스누피\'찰리';

console.log(smallQutoation);

출력 : 스누피'찰리

 

++ `` 이용 (이게 제일 간편함)

const flower = `안개
꽃`;

console.log(flower);
console.log(typeof flower);

const groupName = '마마무';

console.log(groupName + ' 문별');
console.log(`${groupName} 문별`);

출력 : 

안개

꽃   -> `` 이용하면 엔터 쳐도 그대로 출력

string

마마무 문별

마마무 문별

 

3) Boolean(불리언) 타입

const isTrue = true;
const isFalse = false;

console.log(typeof isTrue);
console.log(typeof isFalse);

출력 : 

boolean

boolean

 

4) undefined(언디파인드) 타입

-> 사용자가 직접 값을 초기화하지 않았을 때 지정되는 값

* 직접 undefined로 값을 초기화하는건 지양해야함 = 개또라이미친넘

let noInit;

console.log(noInit);
console.log(typeof noInit);

출력 :

undefined

undefined

 

5) null(널) 타입

-> undefined와 마찬가지로 값이 없다는 뜻이나 JS에서는 개발자가 명시적으로 없는 값으로 초기화할 때 사용

let init = null;

console.log(init);
console.log(typeof init);

출력 : 

null

object -> 이렇게 나오는게 버그인데 이미 object로 받아들인 사람들이 많아서 수정하지 않음

 

6) Symbol(심볼) 타입

-> 유일무이한 값을 생성할 때 사용 / 다른 프리미티브 값들과 다르게 Symbol함수를 호출해서 사용됨

const test1 = '1';
const test2 = '1';

console.log(test1 === test2);

const symbol1 = Symbol('1');
const symbol2 = Symbol('1');

console.log(symbol1 === symbol2);

출력 : 

true

false -> 같아 보이지만 유일무이한 값이기 때문에 false 출력됨

 

7) Object(객체) 타입

-> Map타입과 굉장히 비슷 / key:value의 쌍으로 이루어져 있음

const dictionary = {
red :'빨간색',
orange : '주황색',
yellow : '노란색',
};

console.log(dictionary);
console.log(dictionary['red']);

console.log(typeof dictionary);

출력 : 

{  red : '빨간색', orange : '주황색', yellow : '노란색' }

빨간색

object

 

7-1) Array 타입

-> 값을 리스트로 나열할 수 있는 타입

+ index -> 0부터 시작해서 1씩 증가

const colorArray = [
'검은색',
'보라색',
'하얀색',
'핑크색',
];
console.log(colorArray);

console.log(colorArray[0]);

colorArray[1] = '파란색';
console.log(colorArray);

console.log(typeof colorArray);

출력 : 

[ '검은색', '보라색', '하얀색', '핑크색' ]

검은색

[ '검은색', '파란색', '하얀색', '핑크색' ] -> index를 이용하여 값 수정 가능

object

 

/**

* static typing -> 변수를 선언할 때 어떤 타입의 변수를 선언할 지 명시를 한다

*                           C

* dynamic typing -> 변수의 타입을 명시적으로 선언하지 않고 값에 의해 타입을 "추론"

*                              JS -> dynamic typing

*/


- Hoisting

-> 모든 변수 선언문이 코드의 최상단으로 이동되는 것처럼 느껴지는 현상

< 1 >

console.log(name);
var name = '스누피';
console.log(name);

출력 : 

undefined

스누피

 

< 2 >

var name;
console.log(name);
name = '스누피';
console.log(name);

< 1 > 코드는 < 2 > 코드처럼 작동함

= Hoisting

 

* var뿐만 아니라 let과 const에서도 Hoisting이 발생함

console.log(dog);
let dog = 'yuki';

출력 :

Cannot access 'dog' before initialization (오류)

= dog라는 변수가 존재는 함 (undefined로 배정 되어 있음) 그치만 let으로 선언했기 때문에

실제 dog라는 변수에 값을 할당하는 순간이 오기 전에 접근할 수 없게 되는 것

(let 키워드 말고 const 키워드를 사용해도 동일하게 출력됨)

 

* var키워드는 hoisting 현상을 막아주지 못하지만

let과 const 선언하고 그 값이 초기화 되기 전에 값을 미리 가져오는 버그를 방지할 수 있음

=> var 키워드를 더이상 잘 쓰지 않는 이유