for in 반복문 : Object에 사용
for of 반복문 : Array, String, Arguments, NodeList, Map, Set에 사용
* for in 반복문
Object에 있는 값을 전부 하나씩 꺼내서 사용할 때
1. enumerable(셀 수 있는지 여부)이 true인 것만 반복
Object.getOwnPropertyDescriptor(오브젝트명, key값): writable, enumerable, configurable 상태 출력
var object1 = { name : 'kim', age : 30 };
Object.getOwnPropertyDescriptor(object1, 'name');
for (var key in object1) {
console.log(object[key])
}
2. 부모의 prototype 반복
hasOwnProperty(key): 내가 직접 가지고있는 값 판별, true / fasle 반환
class parent {
age = 30;
}
parent.prototype.name = 'Park';
var obj1 = new parent();
for (var key in obj1) {
if (obj1.hasOwnProperty(key)) {
console.log(object[key])
}
}
3. Object에만 사용 가능
* for of 반복문
Array, String, Arguments, NodeList, Map, Set에 있는 값을 전부 하나씩 꺼내서 사용할 때
1. iterable(자료형[Symbol.iterator]()
;를 사용할수 있는 것)한 자료형에만 사용가능
var arr1 = [2,3,4,5]
for (var data of arr1) {
console.log(data)
}
for (var data1 of 'ABC') {
console.log(data1)
}
예시
key값에 숫자를 제외한 문자만 남기기
var products = [
{
name1 : 'chair',
price1 : 7000,
},
{
name2 : 'sofa',
price : 5000,
},
{
name1 : 'desk',
price3 : 9000,
},
];
let newValue;
let newKey;
for (var item of products) {
console.log(item);
for (var key in item) {
newKey = key.split('').filter((x) => isNaN(x)).join('');
newValue = item[key];
item[newKey] = newValue;
delete item[key];
}
}
console.log(products);
* Symbol 자료형
var 변수명 = Symbol('설명')
: Object 자료형의 숨겨진 key값
var sb = Symbol('설명');
var weight = Symbol('비밀 몸무게');
var person = { name : 'kim', [height] : 300 };
person.weight = 100;
person[weight] = 200;
console.log(person);
for (var key in person) {
console.log(person[key]);
}
특징
1. Symbol에 설명이 같아도 같은 Symbol이 아니다, 만들 때 마다 새로운 Symbol이 생성
Symbol.for()로 전역 심볼을 생성하면 설명이 같으면 같아짐
var a = Symbol.for('설명1');
var b = Symbol.for('설명1');
var c = Symbol('설명1');
console.log(a === b)
console.log(a === c)
2. 기본 내장 Symbol
Array, Object 자료형을 만들 때 자동으로 생성되는 Symbol이 있다 = [Symbol.iterator]
* Map 자료형
자료간의 연관성을 표현하기 위해 사용
key값에 모든 자료형 사용 가능
1. Map.set(): Map 자료 추가
2. Map.get(): Map key에 해당하는 value 출력
3. Map.delete(): Map key에 해당하는 key, value 삭제
4. Map.size: Map 길이
var person = new Map(
[
['male', 'men'], ['address','seoul']
]
);
person.set('name','kim');
person.set([1,2,3], 'arr1');
person.get('age');
person.delete('age');
person.size;
console.log(person);
* Set 자료형
Array에 중복된 자료를 제거한 자료형
1. Set.add(): Set 자료 추가
2. Set.has(): Set value가 유무 확인
3. Set.delete(): Set value 삭제
4. Set.size: Set 길이
var personList = ['john', 'tom', 'andy', 'tom'];
var pl = new Set(personList);
pl.add('sally');
pl.add('tom');
pl.delete('tom');
pl.has('tom');
pl.size;
console.log(pl);
personList = [...pl];
console.log(personList);