JS Object
Table of contents
μλ°μ€ν¬λ¦½νΈ κ°μ²΄
μλ°μ€ν¬λ¦½νΈλ κ°μ²΄ κΈ°λ°μ νλ‘κ·Έλλ° μΈμ΄λ‘ primitive data typeμ μ μΈν λλ¨Έμ§λ€(function, array, regex λ±)μ λͺ¨λ object typeμΌλ‘μ μλ°μ€ν¬λ¦½νΈλ₯Ό μ΄λ£¨κ³ μλ€.
- reference typeμ΄λΌκ³ λΆλ₯΄κΈ°λ νλ€.
- mutable valueμ΄λ€.
- λ€μν νμ μ κ°λ€μ νλμ λ¨μλ‘ κ΅¬μ±ν 볡ν©μ μλ£ κ΅¬μ‘°μ΄λ€.
- μΌλ° κ°μ²΄λ lengthλ₯Ό κ°μ§ μ μ¬ λ°°μ΄κ°μ²΄(array-like objects)μ΄λ€.
κ°μ²΄μ νλ‘νΌν°μ μ κ·ΌνκΈ° μν΄ μ¬μ©λλ [] μ°μ°μλ μλ³μ(μλ³μλ νλ‘κ·Έλλ¨Έκ° νλ‘κ·Έλ¨ μμ μ§μ μ½λ©νμ¬ λ£κΈ° λλ¬Έμ μ μ μ΄λ€) λμ , νλ‘κ·Έλ¨ μ€ν μκ°μ λμ μΌλ‘ μΌλ§λ μ§ λ³κ²½ν μ μλ λ¬Έμμ΄μ μ¬μ©νμ¬ νλ‘νΌν°μ μ΄λ¦μ ννν μκ° μμ΅λλ€.
μ΄λ¬ν λ°©μμΌλ‘ κ°μ²΄λ₯Ό μ¬μ©ν λ μ΄λ₯Ό μ°κ΄ λ°°μ΄(associative array)μ΄λΌ λΆλ¦ λλ€.
μ°κ΄ λ°°μ΄μ λμ μΌλ‘ μμμ κ°κ³Ό μμμ λ¬Έμμ΄μ μ°κ΄μ§μ΄ μ§μ ν μ μλ μλ£κ΅¬μ‘°μ λλ€.
μ΄μ κ΄λ ¨νμ¬ 'λμμν€λ€(map)'λΌλ μ©μ΄λ μμ£Ό μ¬μ©ν©λλ€.
μ¦, "μλ°μ€ν¬λ¦½νΈλ λ¬Έμμ΄(νλ‘νΌν°μ μ΄λ¦)μ μμμ κ°μΌλ‘ λμμν¨λ€"μ κ°μ΄ ννν©λλ€.
μΆμ²: μ°κ΄ λ°°μ΄λ‘μμ κ°μ²΄ (=μ μ¬λ°°μ΄ κ°μ²΄)
κ°μ²΄ μμ± λ°©λ²
- κ°μ²΄ 리ν°λ΄
- Object μμ±μ ν¨μ
- μμ±μ ν¨μ
- Object.create λ©μλ
- ν΄λμ€ (ES6)
κ°μ²΄λ νλ‘νΌν°μ μ§ν©
κ°μ²΄λ 0κ° μ΄μμ νλ‘νΌν°μ μ§ν©μ΄λ©° νλ‘νΌν€λ keyμ valueλ‘ κ΅¬μ±λλ€.
var object = {key: 'value'};
νλ‘νΌν° ν€
νλ‘νΌν° ν€λ νλ‘νΌν° λ°Έλ₯μ μ κ·Όν μ μλ μλ³μ μν μ νλ©° λΉ λ¬Έμμ΄μ ν¬ν¨νλ λͺ¨λ λ¬Έμμ΄ λλ symbol κ°μ μ¬μ©ν μ μλ€.
μλ°μ€ν¬λ¦½νΈ μλ³μ λ€μ΄λ° κ·μΉμ μ€μν΄μΌ νλ©° λ°λ₯΄κΈ° νλ κ²½μ° λ°μ΄νλ‘ κ°μΈ μ¬μ©νμ¬μΌ νλ€.
var obj = {propertyKey: 'property value','property-key': 'property value'};
μΈ λ²μ§Έ λΌμΈμ 'property-key'
μ κ΄νΈλ₯Ό μ¬μ©νμ§ μλλ€λ©΄ -
λ₯Ό μ°μ°μλ‘ ν΄μνλ€.
μ΄κ²λ ν€λ‘ μ¬μ© κ°λ₯νλ€κ³ ?
λΉ λ¬Έμμ΄λ νλ‘νΌν° ν€λ‘ μ¬μ©ν μ μλ€. νμ§λ§ ν€λ‘μ μλ―Έκ° μμΌλ―λ‘ μ¬μ©νμ§ μλ κ²μ΄ μ’λ€.
var obj = {'': ''};
μλ°μ€ν¬λ¦½νΈμμ μ¬μ©νλ keyword(μμ½μ΄)λ μ¬μ© κ°λ₯νλ€. νμ§λ§ μμμΉ λͺ»ν μλ¬λ₯Ό λ°μμν¬ μ¬μ§κ° μμΌλ μ¬μ©νμ§ λ§μ
var obj = {for: 4,return: 3};
μ«μλ§ μ¬μ©νλ κ²λ κ°λ₯νλ€. μ΄λ μ묡μ νμ λ³νμ ν΅ν΄ λ¬Έμμ΄λ‘ ν λ³νμ΄ λκΈ° λλ¬Έμ΄λ€.
var obj = {0: 1,1: 2,2: 3};
νλ‘νΌν° λ°Έλ₯
μλ°μ€ν¬λ¦½νΈμμ μ¬μ©ν μ μλ λͺ¨λ κ°μ νλ‘νΌν° κ°μ΄ λ μ μλ€.
λ©μλ(method)
νλ‘νΌν° κ°μ΄ ν¨μμΌ κ²½μ° μΌλ° ν¨μμ ꡬλΆνκΈ° μν΄ λ©μλλΌ λΆλ₯Έλ€.
μλ°μ€ν¬λ¦½νΈμ ν¨μλ μΌκΈ κ°μ²΄μ΄κΈ° λλ¬Έμ κ°μΌλ‘ νκ° λ μ μκΈ° λλ¬Έμ νλ‘νΌν° κ°μΌλ‘ μ¬μ©μ΄ κ°λ₯νλ€.
νλ‘νΌν° μ κ·Ό
νλ‘νΌν° λ°Έλ₯μ μ κ·Όνλ λ°©λ²μ λ κ°μ§κ° μλ€.
- λ§μΉ¨ν νκΈ°λ²(dot notation)
- λ§μΉ¨ν νκΈ°λ²μΌλ‘ μ κ·Όνλ €λ©΄ νλ‘νΌν° ν€μ 곡백, μ°μ°μ, νΉμ λ¬Έμκ° μμ΄μΌ νλ€.
- λκ΄νΈ νκΈ°λ²(bracket notation)
- λκ΄νΈ μ°μ°μ λ΄λΆμ νλ‘νΌν€ ν€λ λ°λμ λ°μ΄νλ‘ κ°μΈμΌ νλ€.
var obj = {propertyKey: '1st'};// λ§μΉ¨ν νκΈ°λ²μ μ¬μ©ν νλ‘νΌν° μ κ·Όconsole.log(obj.propertyKey); // 1st// λκ΄νΈ νκΈ°λ²μ μ¬μ©ν νλ‘νΌν° μ κ·Όconsole.log(obj['propertyKey']); // 1st
νλ‘νΌν°μ μ κ·Όν λ μ£Όμν΄μΌ νλ κ² λ€
λ§μΉ¨ν νκΈ°λ²μΌλ‘ μ κ·Όνλ €λ©΄ νλ‘νΌν° ν€μ 곡백, μ°μ°μ, νΉμ λ¬Έμκ° μμ΄μΌ νλ€.
var obj = {'property-key': '2nd'};console.log(obj.property-Key);// λΈλΌμ°μ νκ²½: NaN// Node.js νκ²½: ReferenceError: Key is not defined
λκ΄νΈ μ°μ°μ λ΄λΆμ νλ‘νΌν€ ν€λ λ°λμ λ°μ΄νλ‘ κ°μΈμΌ νλ€.
var obj = {'property-key': '2nd'};console.log(obj[property-Key]); // ReferenceError: property is not definedconsole.log(obj['property-Key']); // 2nd
νλ‘νΌν° ν€κ° μ«μλ§μΌλ‘ μ΄λ£¨μ΄μ§ λ¬Έμμ΄μΈ κ²½μ° λ°μ΄νλ₯Ό μλ΅ κ°λ₯νλ€.
var obj = {1: 1,2: 2};console.log(obj[1]); // 1console.log(obj['1']); // 1console.log(obj[2]); // 2console.log(obj['2']); // 2
νλ‘νΌν° κ° κ°±μ
μ΄λ―Έ μ‘΄μ¬νλ νλ‘νΌν°μ κ°μ ν λΉνλ©΄ νλ‘νΌν° κ°μ΄ κ°±μ λλ€.
var obj = {'propertyKey': '1st'};obj.propertyKey = '2nd';console.log(obj); // {propertyKey: "2nd"}
νλ‘νΌν° λμ μμ±
μ‘΄μ¬νμ§ μλ νλ‘νΌν°μ κ°μ ν λΉνλ©΄ νλ‘νΌν°κ° λμ μΌλ‘ μμ±λμ΄ μΆκ°λκ³ νλ‘νΌν° κ°μ΄ ν λΉλλ€.
var obj = {'property-key': '2nd'};obj.propertyKey = '1st';console.log(obj); // {'property-key': '2nd', propertyKey: "1st"}
ES6μμ μΆκ°λ κΈ°λ₯
ES6μμλ λμ± κ°νΈνκ³ ννλ ₯ μλ κ°μ²΄ 리ν°λ΄μ νμ₯ κΈ°λ₯μ μ 곡νλ€.
λ¨μΆ νλ‘νΌν°
ES6μμλ νλ‘νΌν° κ°μΌλ‘ λ³μλ₯Ό μ¬μ©νλ κ²½μ° λ³μ μ΄λ¦κ³Ό νλ‘νΌν° ν€κ° λμΌν μ΄λ¦μΌ λ, νλ‘νΌν° ν€λ₯Ό μλ΅(property shorthand)ν μ μλ€.
let x = 1, y = 2;// νλ‘νΌν° μΆμ½ ννconst obj = {x, // x: x μ κ°λ€y, // y: y μ κ°λ€};console.log(obj); // {x: 1, y: 2}
λ©μλ μΆμ½ νν
ES6μμλ λ©μλλ₯Ό μ μν λ, function ν€μλλ₯Ό μλ΅ν μΆμ½ ννμ μ¬μ©ν μ μλ€.
const obj = {name: 'Sop',// λ©μλ μΆμ½ ννsayHi() {console.log('Hi! ' + this.name);}};obj.sayHi(); // Hi! Sop
λ©μλ μΆμ½ ννμΌλ‘ μ μν λ©μλλ νλ‘νΌν°μ ν λΉν ν¨μμ λ€λ₯΄κ² λμνλ€.
κ³μ°λ νλ‘νΌν°
ES6μμλ κ°μ²΄λ₯Ό λ§λ€ λ κ°μ²΄ 리ν°λ΄ μμ νλ‘νΌν° ν€κ° λκ΄νΈλ‘ λλ¬μΈμ¬ μλ κ²½μ°, μ΄λ₯Ό κ³μ°λ νλ‘νΌν°(computed property) λΌκ³ λΆλ₯Έλ€.
let fruit = "apple";let bag = {[fruit]: 'μ¬κ³Ό',};console.log(bag.apple);
κ°μ²΄ 리ν°λ΄ λ΄λΆμμ νλ‘νΌν° ν€ λμ μμ±
μλ₯Ό νμ©νλ©΄ κ°μ²΄ 리ν°λ΄ λ΄λΆμμλ κ³μ°λ νλ‘νΌν° μ΄λ¦μΌλ‘ νλ‘νΌν° ν€λ₯Ό λμ μμ±ν μ μλ€.
const prefix = 'prop';let i = 0;// κ°μ²΄ 리ν°λ΄ λ΄λΆμμ νλ‘νΌν° ν€ λμ μμ±const obj = {[`${prefix}-${++i}`]: i,[`${prefix}-${++i}`]: i,[`${prefix}-${++i}`]: i,};console.log(obj); // {prop-1: 1, prop-2: 2, prop-3: 3}
ν΄μ¦
Q1. μλ°μ€ν¬λ¦½νΈλ ν΄λμ€ μμ΄ κ°μ²΄λ₯Ό μμ±ν μ μλ€. ( O / X )
- A.
X, μλ°μ€ν¬λ¦½νΈλ ν΄λμ€ μμ΄ κ°μ²΄ μμ±μ΄ κ°λ₯νλ€.
Q2. λΈλΌμ°μ νκ²½κ³Ό node.jsμ κ°κ° μ μ κ°μ²΄λ 무μμΈκ°
- A.
window, global
Q3. window μ μ κ°μ²΄κ° κ°μ§κ³ μλ μ μ κ°μ²΄ νλ‘νΌν° 3κ°μ§ μ΄μ
- A.
Object, String, Number, Boolean, Function, Array, RegExp, Date, Math, Promise