- JS의 원시(Primitive) 타입으로 ES6에서 새롭게 추가되었다.
🖐️ 원시(Primitive) 타입은 객체도 아니고 메서드도 아닌 타입을 의미한다.- Symbol은 객체 속성(object property)을 만들 수 있는 원시 타입이다.
let symbolProperty = Symbol("key");
let obj = {};
obj[symbolProperty] = "value"
console.log(obj); // {Symbol(key) : "value"}
console.log(obj[symbolProperty]); // "value"
console.log(typeof symbolProperty); // "symbol"
let symbolProperty1 = Symbol("key"); // Symbol(key)
let symbolProperty2 = Symbol("key"); // Symbol(key)
let obj = {};
obj[symbolProperty1] = "value";
obj[symbolProperty2] = "value";
console.log(obj); // {Symbol(key) : "value1", Symbol(key) : "value2"}
console.log(symbolProperty1 === symbolProperty2); //false
//type은 같지만 독립적인 symbol이므로 key값이 같아보여도 다른 객체이다. (사실 어떠한 구조로 비교하는건지 개인적으로 의문이 든다....😭)
"text" + Symbol("string"); // Error
// Uncaught SyntaxError: Invaild or unexpected token
### Symbol 생성 방법
```js
Symbol(key)
Symbol.for(key) // Symbol과 달리 전역으로 존재하는 global symbol table 참조
Symbol.iterator // 에러를 만날 때 가장 많이 만나는 에러명이 아닌가 싶다..
let obj = {
[Symbol("a")]: 10,
[Symbol("b")]: 20,
};
Object.getOwnPropertySymbols(obj); //[Symbol(a), Symbol(b)]
Object.keys(obj); // []
for(let i in obj) {
console.log(i) // 반환값 없음
};
JSON.stringfy(obj); // "{}"
<marquee bgcolor='yellow'>hi</marquee>
React.createElement(
/* type */ "marquee"
/* props */ "yellow"
/* children */ "hi"
);
그리고 위 함수는 다음과 같은 객체를 반환한다.
{
type: "marquee"
props: {
bgcolor: "yellow",
children: "hi",
}
key: null,
ref: null,
$$typeof: Symbol.for("react.element"),
🖐️ XSS란?
Cross-site Scripting 약자는 CSS지만 이미 흔히 쓰는 Cascading Style Sheets(CSS)가 있기 때문에 XSS라고 칭하였고 이는 스크립트를 악의적으로 삽입해 사용자에게 공격하는 해킹 기법이다. 다음에 자세히 다룰 예정.