일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- numpy
- java설치
- Eclipse
- 람다식
- spring 환경설정
- Flex Box 기본
- 관계형데이터베이스
- 오산대맛집
- 자바 스프링
- Hooks
- Flexbox Froggy
- SQL
- HTML5
- SQL 문제
- 플랙스박스기본
- 타입
- REACT
- SQL 연산자
- 리액트
- 이클립스
- ubuntu
- 객체지향프로그래밍
- node.js
- 자바스프링
- 노마드코더
- SQL 명령어
- 환경설정
- spring
- java spring
- 스프링
- Today
- Total
이것저것
[Javascript]변수의 타입 본문
JS는 타입을 Java처럼 쓸려고 하는데 더욱 간편화 한 것이다.
JS는 var로 변수명을 통합해서 썼었다.
ex) var Tiger = 10
하지만 1년 전에 let으로 대신 쓰기 시작했다.
JS는 문자열과 문자의 경계가 사라져서 ' ' 안에 문자열을 입력해줘도 된다.
const는 상수만 입력할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//Ex01
console.log(10)
//Ex02 : 35 변수의 타입
var Tiger = 10
console.log(Tiger);
//var 대신 요즘은 let을 써준다. 문자열과 문자의 경계가 없어져서 ''를 써줘도된다.
let lion = '사자'
console.log(lion);
//상수
const monkey = 20
console.log(monkey);
|
console.log(typeof(변수명)) 을 입력하면 변수의 타입을 출력해준다.
JS에서 쓰이는 7가지 타입을 알아보겠다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
let a = 10
//typeof(변수명)을 입력하면 그 변수의 타입을 알 수 있다.
console.log(typeof(a))
let b = '호랑이'
console.log(typeof(b))
let c = true
console.log(typeof(c))
//js에서 문법에 배열 객체이다.
let d = []
console.log(typeof(d))
//js의 핵심객체로 배열일때는 []쓰고, 객체시 {}를 쓴다.
let e = {}
console.log(typeof(e))
//function 타입
let f = function(){}
console.log(typeof(f))
//쓸수 없는 타입, 타입으로 쓸려고는 했지만 위의 6개중에서 쓸수는 없었다.
let g = undefined
console.log(typeof(g));
|
JS에는 double 타입 float 타입이 전혀 존재하지 않는다. 숫자 뒤에 f를 붙이게 되면 에러가 뜬다.
1
2
3
4
5
6
7
8
9
10
11
|
let a = {
b : {
c : {
d : 10
}
}
}
console.log(a.b.c.d);
//이런식으로 데이터가 들어있는 형식을 JSON 형식이라고 한다.
//객체안에 숫자도 있고 객체도있고 문자도 있고 다 들어있는 형식
|
객체 안에 숫자, 객체, 문자가 다 들어있는 형식을 JSON형식이라고 한다.
구글링을 해보면 더 자세히 알 수 있다.
1
2
3
4
5
6
7
8
|
let a = 10
a = '호랑이' //js에서만 되는데 동적타입 변경이라고한다. 중간중간에 계속 원하는 값으로 변경 가능하다.
console.log(typeof a);
let a = 20
console.log(typeof a);
//한번 정의되었다가 변경된 타입은 typeof를 사용하면 에러가 난다.
|
JS에서는 변수의 타입을 자유롭게 바꿀 수 있다.
하지만 한번 변수의 타입을 바꾸면 typeof를 사용해 타입을 찾아볼 때 오류가 난다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
var a = 10
if(true){
var a = 20
console.log(a); //20
}
console.log(a); //20
//스코프안에 들어가서 변경된 값을 그대로 유지시킨다.
let b = 10
if(true){
let b = 20
console.log(b); //20
}
console.log(b); //10
//let을 사용하면 if문안에서 사용된 let은 안에서만 사용된다.
|
var는 스코프 안에서 변경된 값을 그대로 유지시켜 가져온다.
let은 스코프 안에서의 값은 스코프 안에서만 유지된다.
1
2
3
4
5
6
7
8
9
10
11
|
let s = '호랑이'
s += '사자'
console.log(s);
s += '\n코끼리'
console.log(s);
for(let a = 0; a < 10; a++){
console.log(a);
}
|
첫 번째 실행 결과는 호랑이사자로 출력되고 \n을 붙여주면 한 줄을 띄워준다.
for문은 java와 똑같이 쓰인다.
1
2
3
4
5
6
7
8
|
let str = ''
for(let b = 0; b < 10; b++){
for(let c = 0; c < 10; c++){
str += '* '
}
str += '\n'
}
console.log(str);
|
이중 배열을 가지고 네모를 만드는 코드이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
let a = 10
let b = '20'
console.log(a+10);
console.log(b+10);
//형변환 하는것은 어느 언어든지 필수이다.
let c = String(a) //숫자를 문자열로 변경 (내장함수)
let d = Number(b) //문자를 숫자로 변경 (내장함수)
console.log(typeof c);
console.log(typeof d);
//문자열앞에 +를 붙히면 숫자로 형변환이 된다.
let e = +'30'
console.log(typeof e);
let f = '1234'
g = +f //문자열을 숫자로 변환
console.log(typeof g);
let n1 = '1000'
let n2 = '2000'
console.log(+n1 + +n2); //3000
console.log(+n1 + n2); //10002000
console.log(parseInt(n1) + 10) //Number와 기능은 같지만 parseInt는 숫자가 아닌것을 제거한다.
|
JS에서 형 변환은 내장 함수를 사용해서 변환시킬 수 있다.
숫자를 문자열 형식으로 저장했을 경우 앞에 +만 붙여도 숫자 형식으로 변환시킬 수 있다.
1
2
3
4
5
6
|
let a = 10
console.log(2 ** 3); //2의 3승을 의미한다.
console.log(2 ** 3 ** 2); //2의 3승의 2승을 의미한다. -> 2의 9승이다.
console.log((2 ** 3) ** 2); //8의 2승을 의미
console.log(Math.pow(2, 3)); //2의 3승을 의미
|
**을 이용해서 숫자의 제곱 값을 구할 수 있다.
1
2
3
4
5
6
7
8
|
let n = new Date()
console.log(n.getFullYear()) //2020
console.log(n.getMonth() + 1) //+1을 해줘야 해당 달이 나온다.
console.log(n.getDay()); //1(월요일)
console.log(n.getDate()) //오늘 날짜가 나온다.
console.log(n.getHours()) //시간
console.log(n.getMinutes()) //분
console.log(n.getSeconds()) //초
|
Date라는 함수를 사용해서 년부터 초까지 모두 구할 수 있다.
Month는 1을 더해줘야지 오늘의 달이 나온다.
1
2
3
4
5
|
let start = new Date().getTime()
console.log(start); //현재가지고 있는 숫자를 리턴한다.
for (var i = 0; new Date() < start + 1000; i++) { }
console.log(i); //1초 동안 돌아간 for문의 횟수를 보여준다.(컴퓨터의 성능)
|
getTime으로 현재 가지고 있는 숫자를 리턴한다.
for문을 이용해서 반복 횟수를 가지고 컴퓨터의 성능을 가늠해볼 수 있다.
1
2
3
4
5
|
let a = 123
let b = '123'
console.log(a == b); //값이 같습니까??
console.log(a === b); //타입까지 같습니까??
|
==은 값을 비교하는 것이고 ===는 값뿐이 아니라 타입까지 같아야 true가 나온다.
가장 중요한 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
//*1번 : 함수만드는 모양 (호이스팅이 된다.)
//f1()
function f1() {
console.log('함수 1번 콜');
}
f1()
//함수를 밑에가 아니라 위로 올려도 가능한게 호이스팅이다.
//*2번 : 함수만드는 모양 (호이스팅이 안된다.)
let f2 = function() {
console.log('함수 2번 콜')
}
f2()
//f2()를 위에 올리면 오류가난다.
//*3번 : 람다식처럼 사용가능하다.
let f3 = () => {
console.log('함수 3번 콜')
}
f3(); //뒤의 익명함수와 구분짓기위해서 세미콜론을 붙혀준다.(없을시 오류)
//*iif2
//* 4번 : 익명함수, 즉시실행함수(만들자마자 실행)
(function() {
console.log('함수 4번 콜')
})(); //뒤에 또 익명함수가 있기때문에 구분을 위해서 붙혀준다.
//* 5번 : 람다식으로 익명메소드 호출.
//* 실전에서 많이 쓰이는 메소드
(() => {
console.log('함수 5번 콜')
})();
//*6번 : 인수가 있는 람다익명메소드
((num) => {
console.log(num + '메소드 출력')
})(6);
//* 7번 : 6번 중괄호 생략, 한줄일 경우에만 가능
((num) => console.log(num + '메소드 출력'))(7)
|
JS에서 가장 중요한 것은 함수이다.
함수를 만드는 7가지 방법은 꼭 알아둬야 한다.
JS에서 세미콜론(;)을 안 붙인다고 했지만 22번째 줄과 28,35,40번 줄에 세미콜론(;)을 붙여주는 이유는 () 다음에 바로 ()가 나오게 되면 return을 해준다는 의미로 받아들이기 때문에 함수가 끝났다는 것을 구분 짓기 위해서 세미콜론(;)을 붙인다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//1. 인수전달 x 리턴 x
function f1(){}
//2. 인수전달 o 리턴 x
function f2(num){}
//3. 인수전달 x, 리턴 o
function f3(){ return 100 }
//4. 인수전달 o, 리턴 o
function f4(n){ return n*10 }
f1() //리턴이 없으므로 나올게 없으니 출력코드 x
f2(10)
console.log(f3())
console.log(f4(20))
|
인수 전달과 리턴의 유무에 따라 정의했다. 리턴 값이 있으면 괄호 안에 값을 넣어줘야 오류가 발생하지 않는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
//JS는 함수에 살고 함수에 죽는다 // 클래스 만들기
function tiger(){
this.num = 10
this.f1 = function(){
console.log(2)
this.f2 = () => {
console.log(5)
}
}
}
let t1 = new tiger()
t1.num
t1.f1()
t1.f2()
//함수일수도 있지만 까딱하면 클래스다.
function lion(n, s){
this.n = n
this.s = s
this.f1 = function(){
console.log(this.n, this.s)
}
this.f2 = ()=>{
console.log(this.s, this.n)
}
}
let t2 = new lion(10, '호랑이')
t2.f1()
t2.f2()
|
함수를 가지고 클래스를 만드는 방법이다. JS에서는 람다식을 많이 쓰니 람다식을 자세히 익혀줘야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
//배열 테스트
let ar = [10, 20, 30]
console.log(ar[2]) //30
for(let i = 0; i < ar.length; i ++){
console.log(ar[i]) //10,20,30
}
//forEach를 사용한 구문(람다식 사용)
ar.forEach((item) => {
console.log(item) //10,20,30
})
//key는 0,1,2 ar은 배열의변수
for (const key in ar) {
console.log(key, ar[key]) //0 10, 1 20, 2 30
}
//가변인수를 전달 가능하다. 인수전달을 안해도 되는데 인수전달을 한 것.
function f1(){
console.log('호랑이')
console.log(arguments.length); //3
}
f1(10, 20, 30)
//
function f2() {
let sum = 0;
for (const key in arguments) {
console.log(key, arguments[key]) //0 1, 1 2, 2 3
sum += arguments[key]
}
console.log(sum); //6
}
f2(1, 2, 3)
|
배열을 만드는 법이다. 첫 번째는 for문을 이용해서 배열을 출력하였다.
forEach문을 사용해서 배열을 출력할 수 있다.
for in 문장을 사용할 때는 key는 배열의 번호를 뜻하고 in뒤의 변수는 배열을 뜻한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
function f1(){
console.log(1)
//내부함수는 외부에서 call 할 수 없다.
function f2() {
console.log(2)
};f2()
console.log(3)
}
f1()
//내부함수를 사용할때에는 만들어놓은 함수를 return하는 목적으로 많이 쓴다.
let f3 = function(){
console.log(1);
let f4 = function(){
console.log(2)
}; return f4
}
let f5 = f3()
f5()
//f01함수가 함수를 한번더 리턴해준다.()가 여러개여도 적용된다.(리턴이 여러개이면)
f3()()
|
내부 함수는 외부에서 호출을 할 수 없다는 것을 보여준다.
내부 함수의 return 값이 있다면 f3()()와 같이 ()를 사용해서 리턴 시켜줄 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
let f1 = (num) => {
console.log(num)
let f2 = (str) =>{
console.log('호랑이')
}; return f2 //반드시 f2()로 작성하면 안된다.
}
f1(30)('호랑이')
//살짝 변형
//f2를 없애고 return으로 한번에 다 보내준다.
let f3 = (num) => {
console.log(num)
return (str) => {
console.log('호랑이')
}; //반드시 f2()로 작성하면 안된다.
}
f3(30)('호랑이')
//괄호를 없앴다.
let f4 = (num) => {
console.log(num)
return (str) => console.log('호랑이')
}
f4(30)('호랑이')
|
첫 번째에 return f2에 ()를 붙여주게 되면 return 하는 동시에 바로 return 해주기 때문에 아래의 f1()()의 두 번째 ()에서 오류가 나게 된다.
나머지는 람다식으로 변형을 해준 것을 표현한 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//익명객체를 만들어서 즉시실행 하겠다.
(() => {
console.log(1);
})();
//전체 람다식 문장을 ()로 묶고, ()로 실행한 것
(() => {
console.log(1)
return () => {
console.log(2)
}
})()()
//앞의 람다식이 익명객체이기 때문에 앞에 ;를 붙혀줘야한다.
|
익명 객체를 만들어서 함수를 즉시 실행시켜주는 코드이다.
전체를 람다식으로 묶어주고 마지막에 ()로 익명객체를 실행시켜주었다.
밑에는 람다식으로 묶어준 전체를 실행시켜주고 안에 리턴 값을 한 번 더 실행시켜주기 때문에 ()가 두 번 연속으로 들어갔다.
*배우면서 메모해둔 것을 정리한 것이기 때문에 설명이 어색하거나 틀린 부분이 있을 수도 있습니다.
'JavaScript' 카테고리의 다른 글
JavaScript에서 init을 왜 쓰는 걸까..?? (0) | 2021.05.31 |
---|---|
자바스크립트 기본 끄적끄적2 (0) | 2021.05.28 |
자바스크립트 기본 끄적끄적 (0) | 2021.05.25 |
자바스크립트 필수 개념(1) (0) | 2021.05.24 |
리액트 (0) | 2021.04.06 |