ㅇTL

자바스크립트 데이터 타입 본문

html, javascript

자바스크립트 데이터 타입

정노르레기 2021. 6. 2. 21:48

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

 

Map - JavaScript | MDN

The Map object holds key-value pairs and remembers the original insertion order of the keys. Any value (both objects and primitive values) may be used as either a key or a value.

developer.mozilla.org

완전 중요 사이트

 

{

}

안에 -> 그 안에서만 가능

{} 없고 그냥 밖에

-> 글로벌! 어디서든 가능

 

변수선언

var(never use it)

->선언하기도 전에 쓸 수 있는거. 어디에 선언햇느냐 상관없이 선언한걸 젤위로 끌어올려주는거(hoisting)

->block scope 없음

=> 노답이군아 ~

 

let a 이렇게

let 으로 한다! (mutable type)

(타입도 정하는거아님 걍 let a=값;)

 

constant (상수)

const a = 3;

변경 불가. immutable

 

variable type

primitive type (젤작은 하나): number(type이 number 하나), null, string, boolean, undefined, symbol

object, box container(여러개 묶은거) : function .. 

*Infinity, -Infinity, NaN -> 연산 이상하면ㅇ ㅣ게나오겟죠? 잘확인

 

string : '~', 한글자 여러글자 모두 string

`~~ ${스트링변수}~~` -> 이어서 나옴. + 한거랑 똑가틈

`hi ${brenden}` 이런식으로~  (backtick)

(` 이거는 영어일때 ~₩누르면 됩니도)

${~} -> 안에꺼 계산한 후 결과를 스트링으로해서출력해줌

typeof 변수이름 -> 타입ㄴㅏ옴

 

boolean 

false: 0, null, undefined, NaN(not a number)

true: any other value

 

null

let a=null;

텅텅빈거

 

undefined

let x;

let x2=undefined;

아직어떤지모르는애

 

symbol

식별자주는거

const a=Symbol('dfs'); -> 심볼값 같아도 변수이름다르면 다름

근데

Symbol.for('d'); 이렇게하면 심볼값 같으면 변수같은거임 === 하면 true 나옴

출력할때

a.descriptrion 이러캐해야댐

--

object 

 

Dynamic typing! (동적으로 타입이 결정된다)

런타임에 할당된 값에 따라 타입이 결정된다

런타임에 타입이 결정된다

let text='hello'; -> string

text=1; -> number

text='7'+5; -> string (5를 스트링으로 바꿔버림)

text='8'/'2' -> number (나누기연산자네 -> 숫자네->숫자군)

 

operator

1. string concatenation (+로 스트링 합치는거)

- '1'+2 //12

-`dsfds ${1+2}` // dsfds 3 (계산해서!)

- ' fsf \n \' sdfsf' ('이거하려면 백슬래쉬, \n 이게 줄바꿈)

 

2. numeric operator

+ - * / %(나머지) **(승)

 

3. increment and decrement operator

++a; (바로 +1 함)

a++; (이거하고나서 +1 함)

--a;

 

4. assignment operator

+=

-=

=

 

5. comparison

< <= >= > ===

 

6. logical operator

|| or (여러개중에 하나라도 true면 true)

-처음이라도 트루가 하나라도나오면 넘어감. 다음꺼 연산안함 (젤 heavy애들을 젤 뒤에둬야함)

&& and

-하나라도false나오면 넘어감. 다음꺼 확인안함

! not

 

7. equality

== , != : loose equality -> '5' 와 5가 같음. 내용물만

===, !== : strict equality -> '5'와 5가 다름. 타입도 신경씀

-> === 이걸로 쓰자!

* object : 래퍼런스형식으로 저장됨 (주소)

-> == / ===으로 비교하면 레퍼런스를 비교하게 되는 거

 

console.log(0==false); //true

console.log(0===false); //false

console.log(''==false); //t

console.log(''===false); //f

console.log(null==undefined); //true .. !! 같은 것으로 간주됨

console.log(null===undefined); //false. 그치만 다른 타입임!

 

8. conditioner operator : if !

if (~===~){

~

} else if (~~) {

~

}

 

9. Ternary operator: ?

조건 ? value1:value2

조건이 트루면 1(왼쪽), false면 2 (오른쪽)

 

10 switch

switch (a){

   case 'dfs': 

      어쩌구;

      break; 

   case 'sfsfdsdf':

     어쩌구; 

     break;

   default: 

     어쩌구;

     break;

}

 

11. loops

while 

easy

 

do-while loop

do{

 어쩌구 실행구문

} while(조건);

-> 실행먼저, 그리고 조건확인

 

for

for(begin; condition; step){

~

}

for(let i=0;i<3;i++){

~

}

 

배열출력시

for( const a of 배열이름){

~a ~

}

 

-break : 끝냄

-continue : 다음애로 넘어감

 

<Function>

선언

function name(param .. (이름만) ){~ return;}

//함수이름은 동사형태로 정하긔

 

parameter

-primitive -> value가 전달됨

-object -> reference가 전달됨 

 

default prameter

parameter 두개인데 하나만 전달함 -> 하나는 undefined !

->

function a(q, e='sfs'){ ~ }

이렇게 하면 전달 안됐을 때 저게 기본으로 들어가게 됨

 

rest parameter

function a ( ... args){

~

}

-> 배열형태로 전달됨

 

local scope

: 밖에서는 안이보이지않고 안에서만 밖을 볼 수 있다

안쪽에잇는건 안쪽에서만 접근 가능

더 밖에잇는애들만 사용 가능

 

return

*리턴값 없으면

return undefined = 생략 가능

 

early return

리턴 빨리하도록

쯤쯤

 

function expression

: 함수는 변수와 마찬가지로 변수할당되고 파라미터로 전달가능하고 리턴값으로도된다

그냥 하나의 데이터타입으로 볼 수 있다

const print = function(){~}; // 이름없으면 anonymous function, 있으면 named function -> 디버깅에굳이라서 이름쓰는거

print(); 이렇게 사용 가능

const a=print;

a(); 가능

 

* 함수는 hoisting 됨. 즉 선언한거가 젤 위로가서

선언되기 이전에 함수 사용가능한거.

걍 선언 나중에 해도되는거 !

 

callback

: 함수를 전달해서 함수안에서 그 함수를 부르는 것 !

전달되는 함수 = 콜백함수

function ( a, b(함수)){

~

b();

~

}

 

arrow function

const a = () => 함수내용 ;

이렇게....!

(한줄이면 블럭 안씀, 여러줄이면 블럭씀, 블럭쓰면 리턴시 return 키워드 써야댐, 한줄이면 return 안써도댐)

const add = (a,b) => a+b;

=

const add = function (a,b){

    return a+b;

}

 

IIFE

function hello(){

 ~~

}

hello();

-> 선언함과 동시에 실행?

(function hello(){

 ~~

})();

이렇게 하면 바로실행 !!

 

 

<클래스와 오브젝트>

class a {

 person;

 age; //field (속성)

 speak(); // method (행동)

 

class (붕어빵 틀) (template)

-> 하나하나 애들 = object (붕어빵)

 

1. class 선언

class a {

 

}

 

class person{

constructor(name, age){

this.name=name;

this.age=age;

}

(이러면 따로 변수안써도되는듯)

 

speak(){

console.log(`${this.name}: hello!`);

}

}

 

const juny = new person('juny', 3);

이렇게 클래스 오브젝트 만듭니다 !

juny.speak();

console.log(juny.age);

 

2. getter, setter

-> 누가 바보같이 잘못 설정해도 그러지않을 수 잇도록 (나이를 -1로 한다던가 ...)

a에 게터와 세터가 정의되어있을 때

클래스안의 a 프로퍼티에 접근하면 바로 get (게터)에서 값을 읽어옴

글고 a=몇 이렇게 값을 넣으면 바로 a의 세터로가서 값을 받음

-> 게터와 세터안의 변수이름을 a와 똑같이 한다면 안됨 이름을 다르게 해줌

 

class User{

constructor(first, last, age){

this.first=first;

this.last=last;

this.age=age;

}

 

get age(){ //값을 가져온다

return this._age;

}

set age(value){ //값을 설정한다

this._age= value < 0 ? 0:value;

}

}

//이 클래스 안의 필드는 총 세개 ! first, last, _age

 

const user1=new User('steve','job',-1);

console.log(user1.age);

 

3. public, private

class experiment {

 a=2; //외부에서 접근 가능

 #b=0; //클래스 내부에서만 접근 가능

*아주 정말 최근에 업뎃된거

 

4. static

앞에 static 키워드 붙인다

-> 클래스 자체에 연결된 애 ! 굳굳 알고잇지용!=

 

5. 상속과 다양성

상속

class a extends b { 

~

}

오버라이딩했을 때 부모꺼 호출할꺼면 super.이름();

 

6. instanceof 

object instanceof class

-> 이 오브젝트가 이 클래스를 이용해서 만들어진 앤지 아닌지 알려줌. true/false 반환

*모든 오브젝트는 Object를 상속한 것이다 !!

-> 공통적으로 존재하는 메소드 사용 가능 (toString 같은거 ...)

 

 

'html, javascript' 카테고리의 다른 글

array  (0) 2021.06.14
object  (0) 2021.06.14
javascript  (0) 2021.05.21
css  (0) 2021.05.18
서버운영  (0) 2021.05.18