Javascript_변수

YOOJIN PARK·2021년 11월 29일
0

js공부하기

목록 보기
1/12

오늘부터 자바스크립트 본격적으로 시작🤣
이제부터 본격적으로 어려운 부분들이 나오고 있기때문에, 통곡의 벽이 되지 않기 위해
하루하루 열심히 다져야 한다!! 열쩡열쩡열쩡

변수

정의

하나의 값을 저장하기 위해 확보한 메모리 공간 또는 그 메모리 공간을 식별하기 위해 붙인 이름
메모리를 직접 담고 있는거 보다는 정보를 담는 곳을 가르키는 화살표이다!

변수 저장법

var result = 10+20;
var user = {id:1, name:'Lee'}
var users = [{id:1, name:'Lee'}, {id:2, name:'kim'}]

변수 선언

1) var:
원래 유일한 키워드 였다.전역에서 사용할 변수값
그런데 블록레벨 스코프를 지원하지 않고, 함수레벨스코프를 지원해서 이제는 많이 사용하지 않는다.
회사내에서는 재할당, 재선언이 다 되는 var를 사용하기에는 너무규모가 있기때문에 주로 const를 쓴다고 한다.
2)let:
재선언 불가능, 재할당은 가능하다.
재할당이 가능하기때문에, 마찬가지로 현업에서는 특별히 꼭 값이 바뀌어야 하는 경우에만 사용 한다고 한다.
3)const
재선언, 재할당 불가능, 상수 할당
실제로 많이 사용함, 수정이나 재할당이 불가능하기때문에 그로인한 오류를 줄일 수있음

식별자 네이밍 규칙

  • 문자, 숫자, 언더스코어, $
  • 문자, 언더스코어, $로 시작해야 함(숫자 안됨)
  • 예약자는 식별자로 사용할 수없다.(하다보면 에러로 알게 됨)
  • 알파벳 외에는 추천하지 않는다.
  • 대소문자 구분 해야 한다.
  • 변수에 따로 주석을 달지 않도록 명확히 나타내야 한다.
  • 카멜 케이스 : firstName
  • 스네이크 케이스: first_name
  • 파스칼 케이스: FirstName
  • 헝가리언 케이스: 타입+식별자 (ex strFirstName)

변수 선언 단계

1) 선언 단계:
변수 이름을 등록해 알린다. ex) var score
2) 초기화 단계:
값을 저장하기 위해 메모리 공간을 확보하고, undefined를 할당한다.

var는 선언과 초기화가 함께 일어난다. 선언만하고 할당을 하지 않아도, undefined라는 값을 갖는다.
이러한 과정을 거치지 않으면 이전의 값(garbage value)이 남아서 오류를 발생 시킬 수도 있다.
(*하지만 언제 가져갈 지는모름)

winddow는 전역 / document는 해당 문서를 의미한다.

변수 타입

1. Array(배열)

  • 형태 : ['하나', '둘', '셋'], [100, 200, 300],
  • 호출 : 변수명, 변수명[0], 변수명[0][0] (변수명[index])

1-1) 배열을 만드는 방법

let 과일 = ['사과', '수박', '복숭아', '딸기', '바나나'];
let 과일2 = new Array(5);
let 과일3 = new Array('사과', '수박', '복숭아', '딸기', '바나나');

과일[0] = '한라봉';
  • 과일 2는 undefined로 우선 생성 된다.
  • 과일 3은 ['사과', '수박', '복숭아', '딸기', '바나나']
  • 과일[0]에 넣으면 ['한라봉', '수박', '복숭아', '딸기', '바나나'] 변경
  • 배열은 변경이 가능하다 위에 한라봉으로 바뀐것처럼
  • 문자열은 변경이 불가하다.
let text = 'abcde'
text[0] = z
text ='abcde'

1-2) 다차원배열

let 전교점수 = [
           // 1반
           [[10, 20, 30, 40, 50],
           [20, 30, 40, 50, 60]],
           // 2반
           [[10, 20, 30, 40, 50],
           [20, 30, 40, 50, 60]],
         ];
let 행렬 =[[1,2,3],[4,5,6],[7,8,9]]
행렬[0] = [1,2,3]
행렬[0][0] = 1
행렬[0] + 행렬[0] ='1,2,31,2,3'
행렬[0]*2 = NaN

*행렬의 요소들이 문자열처럼 취급된 결과

<문제 풀이>
1. 각반의 평균을 구하여라

내 풀이
let 전교점수 = [
           // 1반
           [[10, 20, 30, 40, 50],
           [20, 30, 40, 50, 60]],
           // 2반
           [[10, 20, 30, 40, 50],
           [20, 30, 40, 50, 60]],
         ];
let a = 전교점수[0][0]
let a_p = 0;
let b = 전교점수[0][1]
let b_p = 0;
let average = 0;
for (let i of a) {
    a_p += parseInt(i)/a.length
}
for (let i of b) {
    b_p += parseInt(i)/a.length
}
average = (a_p+b_p)/2
선생님 풀이

let 총합 = 0;
let 더해진수 = 0;
for (let i = 0; i<2; i++) {
    for (let j= 0; j<5; j++) {
        총합 += 전교점수[0][i][j];
        더해진수++;
    }
}
console.log(총합/더해진수)

2. String(문자열)

  • 형태 : 'abcde', "abcde", abcde
  • 호출 : 변수명, 변수명0

3. Number(숫자)

  • 형태 : 10, 10.123
  • 호출 : 변수명

4. Boolean(논리값)

  • 형태 : true, false
  • 호출 : 변수명

5. Object(객체)

  • 형태 : {
    "지역이름": "전국",
    "확진자수": 24889,
    "격리해제수": 23030,
    "사망자수": 438,
    "십만명당발생율": 48.0
    }
  • 호출 : 변수명, 변수명.지역이름, 변수명['지역이름'] (변수명.key, 변수명[key])

6. : undefind

7.null : object

NaN : number


내장함수

1.날짜 알아보는 함수

 let d = new Date();
 d.getMonth()
 d.getDate()
 d.getDay()
 d.getHours()
 d.getMinutes()
 d.getSeconds()
 d.get
 d.getFullYear()
  • 월은 0부터 시작한다.
  • 일은 1부터 시작한다.
  • day는 요일(일요일부터 0)
  • 실시간 아니고 new Date() 했을 떄에 시간

2. 배열의 내장함수

let 과일 = ['사과', '수박', '복숭아', '딸기', '바나나'];
let 꺼낸과일 = 과일.pop()
과일.push(꺼낸과일)
과일. push('한라봉')
과일.unshift()
과일.toString()
과일.join('!!*')
과일.slice(2,5)
과일.splice(2,3)
과일.splice(1,3, 'apple')
과일.concat('제주과일')
과일.sort()
과일.reverse()
  • 기존배열에 영향을 주는 것들은 📍
  • pop(): 마지막 요소를 빼옴 📍
  • push(): 해당요소를 마지막 요소로 넣음📍
  • shift(): 맨 처음 요소를 빼옴📍
  • unshift(): 해당요소를 맨 처음 요소로 넣음📍
  • toString(): 대괄호를 없앰(문자열화)
  • join('1') : 배열을 합치는데, 1을 각각 넣어서 합친다.
  • slice(2,5) : 2번째에서 5번째전(4번째) 까지 빼옴
  • splice(2,3) : 앞에가 인덱스 뒤에가 갯수만큼 가져옴📍
  • splice(1,3, 'apple'): 1부터 3을 빼고, apple을 넣는다.📍
  • concat('제주과일') : 제주과일(나중)을 과일(먼저)에 합한다.
  • sort(): 사전식 정렬로 바꿔줌 📍
  • reverse() : 역정렬이 아니라 역순(거꾸로 크기 상관 없이)이다📍
  • sort(정렬하고) + reverse (정렬한 걸 거꾸로) => 역정렬
let 전화번호 = '010.0000.0000'
전화번호.split('.').join('-')
'010-0000-0000'
  • split는 문자열의 메소드!!
  • array.sort((a,b) =>a-b); 오름 (asc)
  • array.sort((a,b => b-a); 내림 (desc)
//오름차순
let data = [10,20,30,11,22,25,111];
data.sort(function(a,b){return a-b})
data.sort((a.b) => a-b)
//내림차순
data.sort(function(a,b){return a-b})
data.sort((a.b) => a-b)

💡 위에 내용이 가능한 이유
sort자체는 유니코드에 정의된 순서에 따라 정렬되기 때문에 원본배열이 바뀌면서 정렬되지만, 그게 정확히 오름차순이나, 문자열순이 아니다. 그래서 오름차순을 위해서는 위의 콜백함수를 이용해야 한다.
파라미터인 a,b의 차가 양수인 경우에는 a를 뒤로 보내고, a,b의 차가 양수인 경우에는 b를 뒤로 보냄

3. 객체(object)

let person = {
  //key: value
  name: '이호준',
  age: 10,
  height : 30,
  weight : 40,
  이력 : {'첫번째직장' : '하나', '두번째직장' : '둘'}
}
person.이력.첫번째직장   //하나 1번
person['이력'].첫번째직장  //하나 2번

let data = object.entries(person);
data[0] ['name': '이호준']

for (let i of data) {
    console.log(i[0], i[1]);
}

for (const [key, value] of Object.entries(object1)) {
  console.log(${key}: ${value});
}
  • 1번, 2번 두개 다 똑같으니까 하나로 통용하자
  • ['']에는 key값이 들어간다.''없으면 변수로 인식해 버림
  • .을 찍으면 멤버연산자라서 그안에서 찾는다.
  • object.keys(person) : key값 배열로 뽑아줌
  • object.values(person) : value값 배열로 뽑아줌
  • object.entries(person) : key와 value값 동시에 뽑아줌
  • 배열 : [값1, 값2, 값3] -> 인덱스 [0], [1], [2] 로 값 접근
  • 오브젝트 : [(키-값)1, (키-값)2, (키-값)3]-> 키로 값 접근 .key_name

오늘 배운 내용들!!

함수

type of a : a의 타입을 알려준다.
k.c : 키인 c의 value 값을 알려준다.
n.tofixed(4): n을 소수점 4째 자리까지 표기(단, 문자열로 반환한다)
math.random():0부터 0.9999999까지 랜덤한 수 꺼내줌

  • 용량
    bit ->byte -> kb -> mb -> gb -> tb-> pb (갈매기털빼로 외우기)

손으로 한번써보고, 타이핑해서 확인 한번더 하고 하니 좀더 잘 기억되는 느낌이라 다시 노트를 꺼냈다.
어렵지만 차근차근 다지면 어느새 단단해져있지 않을까?😁

profile
개발자를 꿈꾸는 개린이입니다.

0개의 댓글