목록WEB/Javascript (26)
on your mark

5.7 맵과 셋 맵 키가 있는 데이터를 저장한다는 점에서 객체와 유사하지만 맵은 키에 다양한 자료형을 허용한다는 점에서 차이가 있다. let map = new Map(); map.set('1', 'str1'); // 문자형 키 map.set(1, 'num1'); // 숫자형 키 map.set(true, 'bool1') // 불린형 키 // 객체는 키를 문자형으로 변환시키지만 // 맵은 키의 타입을 변환시키지 않고 그대로 유지한다. alert(map.get(1)); // 'num1'; alert(map.get('1')); // 'str1'; alert(map.size); // 3 map[key]=2로 값을 설정할 수는 있으나, map을 일반 객체 취급하는 것이기 때문에 여러 제약이 생긴다. 따라서 map ..

5.6 iterable 객체 반복 가능한(iterable, 이터러블) 객체는 배열을 일반화한 객체이다. 이터러블이라는 개념을 사용하면 어떤 객체에든 for..of반복문을 적용할 수 있다. 배열이 아닌 객체가 있는데, 이 객체가 어떤 것들의 컬렉션(목록, 집합)을 나타내고 있는 경우, for..of문법을 적용할 수만 있다면 컬렉션을 순회하는데 유용할 것이다. Symbol.iterator let range = { from: 1, to: 5 } range를 이터러블로 만들려면 (for..of가 동작하도록 하려면) 객체에 Symbol.iterator라는 메서드를 추가해 다음과 같은 일이 벌어지도록 해야 한다. for..of가 시작되자마자 for..of는 Symbol.iterator를 호출한다. (Symbol.i..

셔플 알고리즘(shuffle) Math.random() 사용해서 구현하기 function shuffle(array){ array.sort(() => Math.random() - 0.5); } let arr = [1,2,3]; shuffle(arr); Math.random() - 0.5는 양수나 음수 둘 중 하나이기 때문에 정렬 함수는 요소를 무작위로 재 정렬해준다. 그런데 sort는 이런 용도로 만들어진 메서드가 아니기 때문에 위와 같이 구현하게 된다면 1,2,3으로 만들 수 있는 순열이 같은 빈도로 나타나지 않는다. function shuffle(array) { array.sort(() => Math.random() - 0.5); } let count = { '123' : 0, '..

5.5 배열과 메서드 요소 추가, 제거 매서드 splice arr.splice(index [, deleteCount, elem1, ..., elemN]) 첫 번째 매개변수는 조작을 가할 첫 번째 요소를 가리키는 index, 두 번째 매개변수는 deleteCount로, 제거하고자 하는 요소의 개수를 나타내고, elem1, ..., elemN은 배열에 추가할 요소를 나타낸다. let arr = ["I", "study", "JavaScript"]; arr.splice(1,1); // index 1부터 요소 1개 제거 alert(arr); ["I", "JavaScript"] let arr = ["I", "study", "JavaScript", "right", "now"]; // 처음 세 개의 요소를 지우고, 다..

5.4 배열 배열선언 let arr = new Array(); let arr = []; let fruits = ["apple", "orange", "plum"]; alert(fruits[0]); // apple alert(fruits[1]); // orange alert(fruits[2]); // plum fruits[2] = "pear"; // 배열이 ["apple", "orange", "pear"]로 바뀜 fruits[3] = "lemon"; // ["apple", "orange", "pear", "lemon"]으로 바뀜 alert(fruits.length); // 4 , 배열의 길이를 알아낼 수 있다. alert(fruits); // apple,orange,pear,lemon 배열 요소 전체를 출력..

5.3 문자열 문자열의 불변성 문자열은 수정할 수 없음 문자열의 중간 글자 하나를 바꾸려고 하면 에러가 발생한다. let str = 'Hi'; str[0] = 'h'; // Error: Cannot assign to read only property '0' of string 'Hi' 부분 문자열 추출하기 str.slice(start [,end]) 문자열의 start부터 end까지(end는 미포함)를 반환 let str = "stringify"; alert(str.slice(0,5)); // 'strin', 0번째부터 5번째 위치까지(5번째 위치의 글자는 포함하지 않음) 두 번째 인수가 생략된 경우엔, 명시한 위치부터 문자열 끝까지를 반환 let str = "stringify"; alert( str.sli..

5.2 숫자형 일반적인 숫자 숫자를 입력하는 다양한 방법 let billion = 1e9; // 10억, 1과 9개의 e alert(7.3e9); // 73억 let ms = 0.000001; let ms = 1e-6; // 1에서 왼쪽으로 6번 소수점 이동 16진수, 2진수, 8진수 16진수는 0x를 사용해 표현할 수 있다. alert(0xff); // 255, 대소문자 가리지 않음 let a = 0b11111111; //255의 2진수 let b = 0o377; // 255의 8진수 alert( a== b ); // true; toString(base) num.toString(base)메서드는 base진법으로 num을 표현한 후, 이를 문자형으로 변환해 반환함 let num = 255; alert(n..

5.1 원시값의 메서드 자바스크립트는 원시값을 마치 객체처럼 다룰 수 있게 한다. 원시값을 객체처럼 사용하기 문자열이나 숫자와 같은 원시값을 다루어야 하는 작업이 많은데, 메서드를 사용하면 작업을 수월하게 할 수 있음 원시값은 가능한 한 빠르고 가벼워야 함 이를 해결하기 위해 다음과 같은 해결책을 모색함 원시값은 원시값 그대로 남겨둬 단일 값 형태 유지 문자열, 숫자, 불린, 심볼의 메서드와 프로퍼티에 접근할 수 있도록 언어 차원에서 허용 원시값이 메서드나 프로퍼티에 접근하려 하면 추가 기능을 제공해주는 특수한 객체, "원시 래퍼 객체(object wrapper)"를 만들어 주고 이 객체는 삭제됨 "래퍼 객체"는 원시 타입에 따라 종류가 다양함 let str = "Hello"; alert(str.toUp..