while문이 무한으로 실행하게 되면 브라우저가 과부하가 온다. 그렇기 때문에 while문 안에는 무한루프를 종료 하는 순간이 와야한다. 변수를 이용하여 false 가 될때를 지정하여 무한루프를 종료하거나break문을 사용하여 무한루프를 벗어날 수 있다. 이와 같이 루프를 계속 돌기 때문에 "내가 구하고자 하는 값의 조건이 무엇인지 정확히 모를 경우, 유동적인 경우"에
자바 스크립트의 변수 타입에는 크게 Primitive type(원시타입)과 Reference Type(참조타입)으로 나누어져 있다
원시타입 : 변수들은 데이터 복사가 일어날 때 메모리 공간을 새로 확보하여 독립적인 값을 저장하며
참조 타입 : 메모리에 직접 접근이 아닌 메모리의 위치(주소)에 대한 간접적인 참조를 통해 메모리에 접근하는 데이터 타입이다.
●원시타입
- 원시타입(기본 자료형 또는 기본형) -let num = 1; ●숫자형 -let str = 'abc'; ●문자형 -let bool = true; 또는 false; ●논리형 ture, false 둘만 가능 - 불리언 -let undi = understand; ● -let nul = null; ● -let symbol = symbol();
자바스크립트에서 원시 타입 (string, number, bigint, boolean, undefined, ES6 부터 추가된 symbol) 은 변수에 할당될 때, 메모리의 고정 크기로 원시 값을 저장하고 해당 저장된 값을 변수가 직접적으로 가리키는 형태를 띈다. 또한 값이 절대 변하지않는 불변성을 갖고있기때문에 때문에 재할당 시 기존 값이 변하는것 처럼 보일지 몰라도 사실 새로운 메모리에 재할당한 값이 저장되고 변수가 가리키는 메모리가 달라졌을 뿐이다.
기존에 메모리에 생성된 값들은 그 자체가 변경될 수 없다. 그저 식별자와 연결 되있는 메모리가 바뀌었기에 우리 눈에는 재할당 된 것처럼 보일뿐이다.
●참조타입
참조타입(참조 자료형 또는 참조형) let array = []; ●배열값 let obj = {}; ●객체자료형 elt func = function(){}; ●함수자료형
새로운 변수 b에 a를 할당 하게되면 변수 b의 공간에는 a의 값을 값을 통째로 복사하여 변수의 메모리에 담게 된다. 그렇기에 변수 a가 50으로 재할당 되더라도 b는 전혀 영향을 받지 않는다
원시타입을 제외한 나머지는 참조 타입이다
자바스크립트에서 원시 타입을 제외한 나머지는 참조타입(객체(Object))이라 할 수 있다. 배열과 객체, 그리고 함수가 대표적이며, 원시타입과 가장 큰 차이점은 변수의 크기가 동적으로 변한다는 것이다. 이러한 특징 때문에 Object의 데이터 자체는 별도의 메모리 공간(heap)에 저장되며, 변수에 할당 시 데이터에 대한 주소 ( 힙(Heap) 메모리의 주소값)가 저장되기 때문에 자바스크립트 엔진이 변수가 가지고 있는 메모리 주소를 이용해서 변수의 값에 접근하게 되는것이다.
let myArray = [] 이라는 배열을 생성하면 위와 같이 됌
원시타입의 값들은 직접적으로 저장
참조타입은 heap메모리의 주소값이 저장
참조 타입의 변수는 실제 데이터가 저장된 주소를 참조하기에 참조(reference) 타입이라고 불리는 것이다. 그렇기에 변수의 복사나 수정 시 참조 여부를 잘 고려해야 한다. 만일 이러한 특성을 고려하지 않은 채 중요한 정보를 담고있는 객체나 배열에 수정 및 복사를 가하게되면 원본 데이터가 예상치 못한 방향 으로 변경될 수 있으므로 항상 이를 고려하자.
반복하여 사용되는 독립된 명령이라는 점에서는 다른 언어와 유사하지만, Javascript에서 함수(function)는 독립된 정의가 아닌 객체(object)의 일종으로 여겨진다는 점에서 다르다.
즉, 함수(function)도 객체(object)로 취급된다.
프로퍼티(property)
클래스 내부에 만드는 변수를 프로퍼티 라고 부름. (멤버변수 라고도 함)
프로퍼티에는 주로 객체 내부에서 사용하는 일반적인 정보와 객체 내부 함수(메서드) 에서 처리한 결과값이 저장.
->OOP(객체 지향 프로그래밍)에서 흔히 말하는 getter/setter 'method'의 역할을 수행하면서 마치 데이터 멤버(필드)에 접근하듯이 사용할 수 있는 class member
‘키(key)와 값(value)이 연관된 객체(object)의 부분’ 이를 풀어보면,객체 내에서 선언된 변수()를 의미한다고 볼 수 있다. 다른 언어와의 차이점은, 다른 언어에서는 배열 내부에 있는 값들을 요소()라고 부르지만 Javascript에서는 배열 또한 객체로 표현되기 때문에 요소와 Property는 Javascript에서 사실상 동일하다.
메서드는클래스 및 객체(object)와 연관되어 있는 함수라는 것입니다. 클래스 내에 선언되어 있는 함수가 바로 메서드입니다. 즉, 클래스 및 객체와 연관되어 있는 것이라면 메서드고, 그것들과 상관없이 독립적으로 존재하는 것은 함수입니다. 함수가 메서드보다 더 큰 개념이라고 생각할 수 있습니다. 그래서 메서드를 부를 때 포괄적으로 함수로 지칭하기도 합니다.
함수는 sum(), abs() 같이 독립적으로 사용되는 반면, 메서드는 a라는 객체가 존재할 때 a.upper(), a.lower()와 같은 형태로 사용됩니다.
●변수 자바스크립트에서는 데이터를 저장하는 공간을 변수라고 한다 변수 공간을 생성한는 방법 : num = 3; 1. 적절한 이름을 지어준다 2. 마지막에 세미콜론(;)을 찍어준다 3. num이라는 변수 공간이 생성되고 3이라는 값이 들어간다 변수라는 공간을 생성하기 위해 이름을 지워주는것은 "변수를 선언한다"라고 하고 선언된 변수에 값을 넣는행위를 "데이터를 할당한다"라고함 console.log(num); 변수=변할수있는 수 num = 3; console.log(num); num = 10; console.log(num); 을 입력하면 3,10둘다 찍힘
●데이터 데이터 = 값과 값의 유형(value와 type)을 합친 용어
●암시적 선언 변수를 선언하는 방법을 var, let const를 사용하지않고 변수를 선언하는것 ●명시적 선언 var, let, const를 사용해서 선언하는것 var num = 3;
●var, let, const var : 자바스크립트 초창기 변수선언 키워드 - 중복선언 가능 let : 중복선언 불가능 - (^)표시로 체크해주면서 에러 발생 const : 중복선언 불가능 - let과 동일 대신 let과 다른 한점이 있는데 let은 변수에 할당된 데이터가 변경이 되는데 const는 불가능 let num = 10; console.log(num); num = 20; console.log(num); 출력하면 10,20이 나옴 const는 에러가 뜸
var,let은 변수라 불림 const는 변수가 아니라 상수로 불림(변하지가 않기때문에)
●카멜케이스 변수 이름은 카멜케이스 방식으로 작성해야함 카멜케이스란 단어의 첫 글자는 소문자인데 연결된 단어의 첫글자는 대문자로 작성 let userName = "ㅇ쩌고 저쩌고";
누산기 (acc) 데이터 레지스터로 처리 결과를 임시로 보유하는 역할 https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=sunnytop89&logNo=110122289854 현재 값 (cur) 현재 인덱스 (idx) 원본 배열 (src)
reduce 함수는 *반복 가능한 객체(iterable object) 내 각 요소를 연산한 뒤 이전 연산 결과들과 누적해서 반환해 주는 함수입니다. *반복 가능한 객체(iterable object)란 말 그대로 반복이 가능한 객체로서 요소가 하나의 객체에 여러 개가 들어있고, 한 번에 하나의 요소씩 사용할 수 있는 객체를 말합니다. 대표적으로는 문자열(string), 리스트(list), 딕셔너리(dictionary), 세트(set)가 있습니다. 참고로 파이썬3부터는 reduce가 내장 함수가 아니기 때문에 functools 모듈에서 reduce 함수를 불러와야 합니다.
문자열의 길이가 홀수일 때 2로 나누면 나눈 값은 소숫점이 될 것이다. 그러므로 나눈 값에 Math.floor()메서드를 사용해 반내림을 해주어야 한다. 반올림이 아닌 반내림을 하는 이유는 인덱스는 0부터 시작하기 때문이다.
fuction 함수명(매개변수){ 코드 return 리턴값 }
parseInt(t1 / t2); //몫 parseInt(t1 % t2); //나머지
==vs=== a = 1; b = "1"; ==은 숫자열인지 문자열인지 종류를 나누지 않고 1이면 true ===은 숫자열인지 문자열인지 종류에 대해서도 엄격함 false
array - ['a', 'b', 'c'] for (const i in array) //012 - 인덱스 (자체를 가져온다) for (const i of array) // abc - 요소 (하나하나 가져온다) for (let i = 0; i < array/length; i==) 는 of문이랑 같음
for in문
[2배 + 3배 + 4배 +5배...] [*2 *3 *4 *5 ...] price * 1,2,3,4,... count를 인덱스 카운트 까지의 배수를 각각 price에 곱한후 더하기 (array.reduce) 하면 이용 금액이 나오고 (이용금액 - money) 삼항연사자를써서 음수이면 부호를뺀 정수, 양수이면 0으로 반환
누산기 (acc) 데이터 레지스터로 처리 결과를 임시로 보유하는 역할 https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=sunnytop89&logNo=110122289854 현재 값 (cur) 현재 인덱스 (idx) 원본 배열 (src)
reduce 함수는 *반복 가능한 객체(iterable object) 내 각 요소를 연산한 뒤 이전 연산 결과들과 누적해서 반환해 주는 함수입니다. *반복 가능한 객체(iterable object)란 말 그대로 반복이 가능한 객체로서 요소가 하나의 객체에 여러 개가 들어있고, 한 번에 하나의 요소씩 사용할 수 있는 객체를 말합니다. 대표적으로는 문자열(string), 리스트(list), 딕셔너리(dictionary), 세트(set)가 있습니다. 참고로 파이썬3부터는 reduce가 내장 함수가 아니기 때문에 functools 모듈에서 reduce 함수를 불러와야 합니다.