#
ํ๋กํผํฐ ํ๋๊ทธ๊ฐ์ฒด ํ๋กํผํฐ๋ ๊ฐ(value) ์ ํจ๊ป ํ๋๊ทธ(flag) ๋ผ ๋ถ๋ฆฌ๋ ํน๋ณํ ์์ฑ ์ธ๊ฐ์ง๋ฅผ ๊ฐ๋๋ค.
writable
:true
์ด๋ฉด ๊ฐ์ ์์ ํ ์ ์๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๋ค.enumerable
:true
์ด๋ฉดfor ... in
๋ฃจํ์์ ์ด๊ฑฐํ ์ ์๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด์ด๊ฑฐํ ์ ์๋ค.configurable
:true
์ด๋ฉด ํ๋กํผํฐ ์ญ์ ๋ ํ๋๊ทธ ์์ ์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋ ์ง์์ผ๋ฉด ํ๋กํผํฐ ์ญ์ ์ ํ๋๊ทธ ์์ ์ด ๋ถ๊ฐ๋ฅํ๋ค.
enumerable
ํ๋๊ทธ#
์ด๊ฑฐ ๊ฐ๋ฅ(enumerable) ์ฌ๋ถ๋ฅผ ๋ํ๋ธ๋ค.
๋ฐ๋ณต ๊ฐ๋ฅ(iterable)์๋น์ทํ์ง๋ง ๋ค๋ฅธ ์๋ฏธ์ด๋ค.
configurable
ํ๋๊ทธ#
configurable
ํ๋๊ทธ๋ฅผ false
๋ก ์ค์ ํ๋ฉด ๋์ดํฌ ๋ฐฉ๋ฒ์ด ์๋ค.
defineProperty
๋ฅผ ์จ๋ ๊ฐ์true
๋ก ๋๋๋ฆด ์ ์๋ค.
configurable
: false
๊ฐ ๋ง๋ค์ด๋ด๋ ๊ตฌ์ฒด์ ์ธ ์ ์ฝ์ฌํญ์ ์๋์ ๊ฐ๋ค.
configurable
ํ๋๊ทธ๋ฅผ ์์ ํ ์ ์์enumerable
ํ๋๊ทธ๋ฅผ ์์ ํ ์ ์์.writable: false
์ ๊ฐ์true
๋ก ๋ฐ๊ฟ ์ ์์(true
๋ฅผfalse
๋ก ๋ณ๊ฒฝํ๋๊ฒ์ ๊ฐ๋ฅํจ).getter
/setter
์ ๋ณ๊ฒฝํ ์ ์์(์๋กญ๊ฒ ๋ง๋๋ ๊ฒ์ ๊ฐ๋ฅํจ).
์ด๋ฐ ํน์ง์ ์ด์ฉํ๋ฉด ์๋์ ๊ฐ์ด โ์์ํ ๋ณ๊ฒฝํ ์ ์๋โ ํ๋กํผํฐ๋ฅผ ๋ง๋ค ์ ์๋ค.
#
๊ด๋ จ Object ๋ฉ์๋Object.defineProperty : ๊ฐ์ฒด์ ์๋ก์ด ์์ฑ์ ์ ์ํ๊ฑฐ๋ ์์ ํ๊ณ ๊ทธ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
Object.defineProperties : ๊ฐ์ฒด์ ํ๋ ๋๋ ๊ทธ ์ด์์ ์๋ก์ด ์์ฑ์ ์ ์ํ๊ฑฐ๋ ์์ ํ๊ณ ๊ทธ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
Object.getOwnPropertyDescriptor : ์ฃผ์ด์ง ๊ฐ์ฒด ์์ ์ ์์ฑ์ ๋ํ ์์ฑ ์ค๋ช ์(descriptor)๋ฅผ ๋ฐํํ๋ค.
Object.getOwnPropertyDescriptors : ์ฃผ์ด์ง ๊ฐ์ฒด ์์ ์ ๋ชจ๋ ์์ฑ๋ค์ ์ค๋ช ์(descriptor)๋ค์ ๋ฐํํ๋ค.
Object.preventExtensions(obj) : ๊ฐ์ฒด์ ์๋ก์ด ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ ์ ์๊ฒ ํ๋ค.
Object.seal(obj) : ์๋ก์ด ํ๋กํผํฐ ์ถ๊ฐ๋ ๊ธฐ์กด ํ๋กํผํฐ ์ญ์ ๋ฅผ ๋ง์์ค๋ค. ํ๋กํผํฐ ์ ์ฒด์ configurable: false๋ฅผ ์ค์ ํ๋ ๊ฒ๊ณผ ๋์ผํ ํจ๊ณผ์ด๋ค.
Object.freeze(obj) : ์๋ก์ด ํ๋กํผํฐ ์ถ๊ฐ๋ ๊ธฐ์กด ํ๋กํผํฐ ์ญ์ , ์์ ์ ๋ง์์ค๋ค. ํ๋กํผํฐ ์ ์ฒด์ configurable: false, writable: false๋ฅผ ์ค์ ํ๋ ๊ฒ๊ณผ ๋์ผํ ํจ๊ณผ์ด๋ค.
Object.isExtensible(obj) : ์๋ก์ด ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ false๋ฅผ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ true๋ฅผ๋ฐํํ๋ค.
Object.isSealed(obj) : ํ๋กํผํฐ ์ถ๊ฐ, ์ญ์ ๊ฐ ๋ถ๊ฐ๋ฅํ๊ณ ๋ชจ๋ ํ๋กํผํฐ๊ฐ configurable: false์ด๋ฉด true๋ฅผ ๋ฐํํ๋ค.
Object.isFrozen(obj) : ํ๋กํผํฐ ์ถ๊ฐ, ์ญ์ , ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๊ณ ๋ชจ๋ ํ๋กํผํฐ๊ฐ configurable: false, writable: false์ด๋ฉด true๋ฅผ ๋ฐํํ๋ค.