JavaScript, Vue.js, CSS/JavaScript
[JavaScript] 배열, 심볼
삶_
2022. 6. 30. 22:38
배열(Array)
- 순서가 있는 리스트
- 문자, 숫자, 객체, 함수 등도 포함 가능
- 반복문과 같이 생성, 나열할 때가 많음
- let al = [a, b, … c]
- a = al[0]
- al.length : 배열 길이
- al.push() : 배열 끝에 추가(여러요소도 가능)
- al.pop() : 배열 끝 요소 제거
- al.unshift() : 배열 앞에 추가(여러요소도 가능)
- al.shift() : 배열 앞에 제거
let days = ["sun", "mon", "tue", "wed", "thu",]
//반복문을 통한 나열 (1)
for(let i=0; i<days.length; i++){
console.log(days[i]);
}
//반복문을 통한 나열 (2)
//for ... of
// 보통 이걸 많이 사용함!
for(let day of days ){ //day는 배열의 요소를 의미하고, 아무 문자나 써도 상관없음
console.log(day);
}
- 그 외
- arr.splice(n,m) : 인덱스 n부터 m개까지 제거
- arr.splice(n,m,x) : 인덱스 n부터 m개까지 지우고 x를 추가함
- arr.splice(1,3,100,200) : 1부터 3개까지 지우고 100,200을 그자리에 넣음
- m이 0이면 딱 n번째 위치만 삭제됨
- arr.splice(a, b) : 인덱스 a에서부터 b개 제거
- arr.splice(a, b, c) : 인덱스 a에서부터 b개 제거후 제거한곳에 c 추가
let arr = [1,2,3,4,5];
let result = arr.splice(1,2);
console.log(result); //[2,3] 삭제된 요소들 반환됨
- arr.slice(n,m) : n부터 m까지 반환(m번째 자리는 제외)
- arr.slice() 는 arr의 전체를 반환
- 반환이기 때문에 출력은 반환한 값이지만 원래 값의 변화는 없음
- arr.concat(arr2,arr3 …) : 합쳐서 새 배열 반환
- arr.forEach(function(name, index)) : 배열의 반복문
- 매개변수를 3개 가진 함수를 인수받음.
- 함수(해당요소, 인덱스, 해당 배열자체){…}
- arr.join(a) : 배열 사이에 a를 삽입후 반환
- arr.indexOf(m) : 가장 앞에서 나오는 m의 위치 알려줌
- arr.indexOf(n, m) : n을 m의 인덱스부터 찾아 알려줌. (없으면 -1 반환)
- arr.lastIndexOf(m) : 가장 뒤부터 먼저 나오는 m의 위치 알려줌 (없으면 -1 반환)
- arr.reduce((누적값, 현재값, 현재인덱스, 이 함수를 호출한 배열) => {함수...});
- 이전 콜백의 리턴값을 넘겨받아 어떤 작업을 수행하고 싶을 때 적합한 메서드
- arr.includes(a,b) : a를 인덱스 b부터 검색하여 포함하는지 확인 (true / false 반환)
- arr.find(함수) : 배열 내에서 함수에 true가 되는 대상을 첫번째로 발견하고 반환하고 끝
- arr.findIndex(함수) : 위와 같은데 그 대상의 인덱스를 하나만 반환하고 끝
- arr.filter(함수) : 만족하는 대상들만 찾아 배열로 반환함
- arr.sort() : 오름차순으로 정렬 저장
- 하지만 우리가 원하는 값으로 나오지 않음 (문자열로 취급하여 정렬하기 때문에)
- 비교함수(연산진행)를 만들어 정렬 로직을 구현해야 함
- arr.sort((a,b) => {
return a-b; //내림차순이면 b-a
});
- arr.reverse() : 역순으로 재정렬 저장
- arr.map(함수) : 함수를 받아 특정 기능을 시행하고 새로운 배열을 반환 및 저장
문자열
- substr(1,4) : 인덱스 1에서 4개까지
- substring(1,4) : 인덱스 1에서 인덱스 3까지
심볼
- const a = Symbol();
- 동일한 문자열로 만들어졌어도 서로 다른 심볼이다.
- 프로퍼티 키를 심볼형으로 만들기
- 유일한 식별자. (===, == 을 해도 다른 변수와 같아질수없음)
const id = Symbol('id');
const user = {
name : "Mike",
age : 30,
[id] : 'myid'
}
>>출력시,
{name: "Mike", age: 30, Symbol(id): "myid"}
>>그런데, Object.keys(user)은
{"name","age"} 만 출력된다
${심볼변수명.description} 이렇게해야 출력됨
>>객체에 원본 key는 건드리지 않고 value만 수정할 수 있음
user[id] = 'myid'
Symbol.for()
- 전역 심볼 생성 : 코드 어디든 사용이 가능
- 하나의 심볼만 보장받을 수 있음
- 같은 심볼을 서로 공유함
const id1 = Symbol.for('id');
const id2 = Symbol.for('id');
//일때, id1 === id2
//같은 객체가 같은 심볼을 공유함
Symbol.keyFor(id1)
//"id" 출력.
//심볼 생성시 정했던 key 값을 반환해줌
//전역 심볼이 아닌 다른 심볼의 key값을 알아내는 법
const id = Symbol('id 입니다')
id.description;
//"id 입니다" 출력
숫자 메서드
toString()
- 10진수 → 2진수/16진수
let num = 10;
num.toString(); //10진수
num.toString(2); //2진수
num.toString(16); //16진수
올림/내림
- 올림/내림할 숫자와 관계없이 올리거나 내림.
- Math.ceil() : 올림
- let num = 5.1
- Math.ceil(num); //6
- Math.floor() : 내림
- let num = 5.1소수점을 없애고 싶을때 사용한다
- Math.floor(num); //5
- Math.round() : 반올림
- Math.random() : 0~1 사이 무작위 숫자 생성
소수점 자릿수
- 소수점 둘째자리까지 표현하기
- let user = 30.1234;
- Math.round(user * 100)/100
- toFixed() 이용하기
- user.toFixed(2);
- user.toFixed(0); //30
- user.toFixed(6); //30.123400
- 단 toFixed()는 결과값을 문자열로 반환하기 때문에,
- 결과에 Number(user.toFixed(6)); 을 ㄹ붙여 숫자로 변환한 값을 반환하게 한다
isNaN()
- NaN인지 확인함
- let x = Number(’x’); //NaN일때(’x’는 문자기 때문에 숫자가 아님)
- isNaN(x) //true
parseInt()
- 문자 → 숫자
- Number(문자) 과 같음 (하지만 parseInt가 더 많이 쓰이)
- 읽을수있는 부분만 숫자로 바꿈
- let m = ‘10px’;
- parseInt(m); //10
- let red = ‘f3’;parseInt(red, 16) //하지만 이렇게 문자를 16진수로 바꿀수도 있음
- parseInt(red); //NaN을반환 (숫자로 시작하지 않으면)
parseFloat()
- 문자 → 숫자(실수(소수점까지출력))
문자열 메소드
여러줄 출력
- 줄바꿈 하려면 \n 을 써야함
- 한줄에 몰아서 넣기 (엔터 포함하지 않음)
그 외
- a. length : 문자열 길이
- a[2] : 문자열 내 3번째 위치한 것
- toUpperCase() : 대문자
- toLowerCase() : 소문자
- a.indexOf(’mm’) : 문자열 ‘mm’이 a 내에 어느 위치에 포함되어 있는지
- 없으면 -1 반환
- a.slice(n,m) : n부터 m까지.
- a.slice(n) : n부터 끝까지
- a.slice(2, -2) : 2부터 (끝에서-2)번째 까지
- a.substring(n,m) : n과 m사이 문자열 반환 (음수는 0으로 인식함. 순서 바꿔도 차례대로)
- a.substr(n,m) : n부터 m개를 가져옴
- a.trim() : 앞 뒤 공백 제거
- a.repeat(n) : 문자열 a를 n번 반복함
아스키코드 변환
- 문자 → 숫자
- “a”.codePointAt(0); //97
- 숫자 → 문자
- String.fromCodePoint(97); //”a”