-
- ECMAScript μ¬μμ μ μλ κ°μ²΄
- μ ν리μΌμ΄μ μ μμ κ³΅ν΅ κΈ°λ₯μ μ 곡
- μλ°μ€ν¬λ¦½νΈ μ€ν νκ²½ (λΈλΌμ°μ λλ Node.js νκ²½)κ³Ό κ΄κ³μμ΄ μΈμ λ μ¬μ© κ°λ₯
- μ μ κ°μ²΄μ νλ‘νΌν°λ‘μ μ 곡λ¨
- μ§μ λ³μμ²λΌ μΈμ λ μ°Έμ‘° κ°λ₯
-
- ECMAScript μ¬μμ μ μλμ§ μμ
- μλ°μ€ν¬λ¦½νΈ μ€ν νκ²½ (λΈλΌμ°μ λλ Node.js νκ²½)μμ μΆκ°λ‘ μ 곡νλ κ°μ²΄
-
- μ¬μ©μκ° μ§μ μ μν κ°μ²΄
μλ°μ€ν¬λ¦½νΈμμ κΈ°λ³Έμ μΌλ‘ μ 곡νλ κ°μ²΄λ€μ λ»νλ©°, 40μ¬ κ°μ νμ€ λΉνΈμΈ κ°μ²΄κ° μλ€.
ex ) Object, String, Number, Boolean, Function, Array, RegExp, Date, Math, Map/Set, WeakMap/WeakSet, Promise, Reflect, JSON, Error λ± ...
Math, Reflect, JSON μ μ μΈν νμ€ λΉνΈμΈ κ°μ²΄λ λͺ¨λ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ μμ±μ ν¨μ κ°μ²΄μ΄λ€.
μμ±μ ν¨μ κ°μ²΄μΈ νμ€ λΉνΈμΈ κ°μ²΄λ νλ‘ν νμ λ©μλμ μ μ λ©μλλ₯Ό μ 곡νκ³ μμ±μ ν¨μ κ°μ²΄κ° μλ νμ€ λΉνΈμΈ κ°μ²΄λ μ μ λ©μλλ§ μ 곡νλ€.
| μ μ λ©μλ | ν΄λμ€λ μμ±μ ν¨μμ μ§μ μ°κ²°λ ν¨μ |
|---|
| μμ±μ ν¨μ κ°μ²΄μΈ νμ€ λΉνΈμΈ κ°μ²΄ | μμ±μ ν¨μκ° μλ νμ€ λΉνΈμΈ κ°μ²΄ |
|---|---|
| λλΆλΆ | Math, Reflect, JSON |
| νλ‘ν νμ λ©μλ, μ μ λ©μλ μ 곡 | μ μ λ©μλ μ 곡 |
Math : μνμ μΈ μμμ ν¨μλ₯Ό μν μμ±, λ©μλ μ 곡
JSON : JSON νμμ λ°μ΄ν°λ₯Ό λ€λ£¨λ λ©μλ μ 곡
| μΈμ€ν΄μ€ | ν΄λμ€λ μμ±μ ν¨μλ₯Ό ν΅ν΄ μμ±λ κ°μ²΄ |
|---|
String, Number, Boolean, Function, Array, Date
"μμ±μ ν¨μμ μν΄ κ°μ²΄κ° μμ±λλ€" = μμ±μ ν¨μλ₯Ό μ¬μ©ν΄μ νΉμ νμ μ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νλ€.
// String μμ±μ ν¨μμ μν String κ°μ²΄ μμ±
const strObj = new String('Lee'); // String {"Lee"}
console.log(typeof strObj); // object
κ°μ²΄ strObj λ String μ μΈμ€ν΄μ€μ΄λ€.
// Number μμ±μ ν¨μμ μν Number κ°μ²΄ μμ±
const numObj = new Number(123); // Number {123}
console.log(typeof numObj); // object
// Boolean μμ±μ ν¨μμ μν Boolean κ°μ²΄ μμ±
const boolObj= new Boolean(true); // Boolean {true}
console.log(typeof boolObj); // object
// Function μμ±μ ν¨μμ μν Function κ°μ²΄(ν¨μ) μμ±
const func = new Function('x', 'return x * x'); // Ζ anonymous(x )
console.log(typeof func); // function
// Array μμ±μ ν¨μμ μν Array κ°μ²΄(λ°°μ΄) μμ±
const arr = new Array(1, 2, 3); // (3) [1, 2, 3]
console.log(typeof arr); // object
// RegExp μμ±μ ν¨μμ μν RegExp κ°μ²΄(μ κ· ννμ) μμ±
const regExp = new RegExp(/ab+c/i); // /ab+c/i
console.log(typeof regExp); // object
// Date μμ±μ ν¨μμ μν Date κ°μ²΄ μμ±
const date = new Date(); // Fri May 08 2020 10:43:25 GMT+0900 (λνλ―Όκ΅ νμ€μ)
console.log(typeof date); // object// String μμ±μ ν¨μμ μν String κ°μ²΄ μμ±
const strObj = new String('Lee'); // String {"Lee"}
// String μμ±μ ν¨μλ₯Ό ν΅ν΄ μμ±ν strObj κ°μ²΄μ νλ‘ν νμ
μ String.prototypeμ΄λ€.
console.log(Object.getPrototypeOf(strObj) === String.prototype); // trueμμ±μ ν¨μμΈ νμ€ λΉνΈμΈ κ°μ²΄κ° μμ±ν μΈμ€ν΄μ€μ νλ‘ν νμ
μ νμ€ λΉνΈμΈ κ°μ²΄μ prototype νλ‘νΌν°μ λ°μΈλ©λ κ°μ²΄μ΄λ€.
// Number μμ±μ ν¨μμ μν Number κ°μ²΄ μμ±
const numObj = new Number(1.5); // Number {1.5}
// toFixedλ Number.prototypeμ νλ‘ν νμ
λ©μλλ€.
// Number.prototype.toFixedλ μμμ μ리λ₯Ό λ°μ¬λ¦Όνμ¬ λ¬Έμμ΄λ‘ λ°ννλ€.
console.log(numObj.toFixed()); // 2
// isIntegerλ Numberμ μ μ λ©μλλ€.
// Number.isIntegerλ μΈμκ° μ μ(integer)μΈμ§ κ²μ¬νμ¬ κ·Έ κ²°κ³Όλ₯Ό BooleanμΌλ‘ λ°ννλ€.
console.log(Number.isInteger(0.5)); // falseνμ€ λΉνΈμΈ κ°μ²΄μΈ Number μ prototype νλ‘νΌν°μ λ°μΈλ©λ κ°μ²΄, Number.prototype μ λ€μν κΈ°λ₯μ λΉνΈμΈ νλ‘ν νμ
λ©μλλ₯Ό μ 곡νλ€.
μ΄ λ©μλλ λͺ¨λ Number μΈμ€ν΄μ€κ° μμλ°μ μ¬μ©ν μ μλ€.
Number λ μΈμ€ν΄μ€λ₯Ό ν΅νμ§ μκ³ μ μ μΌλ‘ νΈμΆν μ μλ μ μ λ©μλλ₯Ό μ 곡νλ€.
μμκ°μ΄ μλλ°λ νμ€ λΉνΈμΈ μμ±μ ν¨μκ° μ‘΄μ¬νλ μ΄μ κ° λ¬΄μμΌκΉ?
const str = 'hello';
// μμ νμ
μΈ λ¬Έμμ΄μ΄ νλ‘νΌν°μ λ©μλλ₯Ό κ°κ³ μλ κ°μ²΄μ²λΌ λμνλ€.
console.log(str.length); // 5
console.log(str.toUpperCase()); // HELLOμμκ°μ κ°μ²΄κ° μλλ―λ‘ νλ‘νΌν°λ λ©μλλ₯Ό κ°μ§ μ μλ€. νμ§λ§ μμκ°μΈ λ¬Έμμ΄, μ«μ, λΆλ¦¬μΈ κ°μ κ²½μ° λ§μΉ κ°μ²΄μ²λΌ λ§μΉ¨ν νκΈ°λ²( λλ λκ΄νΈ νκΈ°λ² )μΌλ‘ μ κ·Όνλ©΄ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μΌμμ μΌλ‘ μμκ°μ μ°κ΄λ κ°μ²΄λ‘ λ³νν΄ μ£ΌκΈ° λλ¬Έμ μμκ°μΈ λ¬Έμμ΄μ΄ κ°μ²΄μ²λΌ λμνλ€.
const str = 'hi';
// μμ νμ
μΈ λ¬Έμμ΄μ΄ λνΌ κ°μ²΄μΈ String μΈμ€ν΄μ€λ‘ λ³νλλ€.
console.log(str.length); // 2
console.log(str.toUpperCase()); // HI
// λνΌ κ°μ²΄λ‘ νλ‘νΌν°μ μ κ·Όνκ±°λ λ©μλλ₯Ό νΈμΆν ν, λ€μ μμκ°μΌλ‘ λλλ¦°λ€.
console.log(typeof str); // stringμμκ°μ κ°μ²΄μ²λΌ μ¬μ©νλ©΄ μλ°μ€ν¬λ¦½νΈ μμ§μ μ묡μ μΌλ‘ μ°κ΄λ κ°μ²΄λ₯Ό μμ±νμ¬ μμ±λ κ°μ²΄λ‘ νλ‘νΌν°μ μ κ·Όνκ±°λ λ©μλλ₯Ό νΈμΆνκ³ λ€μ μμκ°μΌλ‘ λλλ¦°λ€.
λνΌ κ°μ²΄ ( wrapper object ) : λ¬Έμμ΄, μ«μ, λΆλ¦¬μΈ κ°μ λν΄ κ°μ²΄μ²λΌ μ κ·Όνλ©΄ μμ±λλ μμ κ°μ²΄
ex) λ¬Έμμ΄μ λ§μΉ¨ν νκΈ°λ²μΌλ‘ μ κ·Όνλ©΄ κ·Έ μκ° λνΌ κ°μ²΄μΈ String μμ±μ ν¨μμ μΈμ€ν΄μ€κ° μμ±λκ³ λ¬Έμμ΄μ λνΌ κ°μ²΄μ [[StringData]] λ΄λΆ μ¬λ‘―μ ν λΉλλ€.
// β μλ³μ strμ λ¬Έμμ΄μ κ°μΌλ‘ κ°μ§κ³ μλ€.
const str = 'hello';
// β‘ μλ³μ strμ μ묡μ μΌλ‘ μμ±λ λνΌ κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€.
// μλ³μ strμ κ° 'hello'λ λνΌ κ°μ²΄μ [[StringData]] λ΄λΆ μ¬λ‘―μ ν λΉλλ€.
// λνΌ κ°μ²΄μ name νλ‘νΌν°κ° λμ μΆκ°λλ€.
str.name = 'Lee';
// β’ μλ³μ strμ λ€μ μλμ λ¬Έμμ΄, μ¦ λνΌ κ°μ²΄μ [[StringData]] λ΄λΆ μ¬λ‘―μ ν λΉλ μμκ°μ κ°λλ€.
// μ΄λ β‘μμ μμ±λ λνΌ κ°μ²΄λ μ무λ μ°Έμ‘°νμ§ μλ μνμ΄λ―λ‘ κ°λΉμ§ 컬λ μ
μ λμμ΄ λλ€.
// β£ μλ³μ strμ μλ‘κ² μ묡μ μΌλ‘ μμ±λ(β‘μμ μμ±λ λνΌ κ°μ²΄μλ λ€λ₯Έ) λνΌ κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€.
// μλ‘κ² μμ±λ λνΌ κ°μ²΄μλ name νλ‘νΌν°κ° μ‘΄μ¬νμ§ μλλ€.
console.log(str.name); // undefined
// β€ μλ³μ strμ λ€μ μλμ λ¬Έμμ΄, μ¦ λνΌ κ°μ²΄μ [[StringData]] λ΄λΆ μ¬λ‘―μ ν λΉλ μμκ°μ κ°λλ€.
// μ΄λ β£μμ μμ±λ λνΌ κ°μ²΄λ μ무λ μ°Έμ‘°νμ§ μλ μνμ΄λ―λ‘ κ°λΉμ§ 컬λ μ
μ λμμ΄ λλ€.
console.log(typeof str, str);μ΄ λ, λ¬Έμμ΄ λνΌ κ°μ²΄μΈ String μμ±μ ν¨μμ μΈμ€ν΄μ€λ String.prototype μ λ©μλλ₯Ό μμλ°μ μ¬μ©ν μ μλ€.
κ·Έ ν, λνΌ κ°μ²΄μ μ²λ¦¬κ° μ’
λ£λλ©΄ λνΌ κ°μ²΄μ [[StringData]] λ΄λΆ μ¬λ‘―μ ν λΉλ μμκ°μΌλ‘ μλμ μνμΈ μλ³μκ° μμκ°μ κ°λλ‘ λλλ¦¬κ³ λνΌ κ°μ²΄λ κ°λΉμ§ 컬λ ν°μ λμμ΄ λλ€.
const num = 1.5;
// μμ νμ
μΈ μ«μκ° λνΌ κ°μ²΄μΈ Number κ°μ²΄λ‘ λ³νλλ€.
console.log(num.toFixed()); // 2
// λνΌ κ°μ²΄λ‘ νλ‘νΌν°μ μ κ·Όνκ±°λ λ©μλλ₯Ό νΈμΆν ν, λ€μ μμκ°μΌλ‘ λλλ¦°λ€.
console.log(typeof num, num); // number 1.5μ«μ κ°λ λ§μ°¬κ°μ§μ΄λ€.
μ«μ κ°μ λν΄ λ§μΉ¨ν νκΈ°λ²μΌλ‘ μ κ·Ό
=> λνΌ κ°μ²΄μΈ Number μμ±μ ν¨μμ μΈμ€ν΄μ€ μμ±
/ μ«μλ λνΌ κ°μ²΄μ [[StringData]] λ΄λΆ μ¬λ‘―μ ν λΉ
: μ΄ λ, Nymber μ λ©μλ μ¬μ©κ°λ₯ν΄μ§
=> λνΌ κ°μ²΄μ μ²λ¦¬ μ’
λ£
=> [[StringData]] λ΄λΆ μ¬λ‘―μ ν λΉλ μμκ°μ λλλ¦Ό
=> λνΌ κ°μ²΄κ° κ°λΉμ§ 컬λ μ
μ λμμ΄ λ¨.
λΆλ¦¬μΈ κ°μΌλ‘ λ©μλλ₯Ό νΈμΆνλ κ²½μ°κ° μμ΄μ μ μ©νμ§ μλ€.
λ¬Έμμ΄, μ«μ, λΆλ¦¬μΈ, μ¬λ²μ μ묡μ μΌλ‘ μμ±λλ λνΌ κ°μ²΄μ μν΄ λ§μΉ κ°μ²΄μ²λΌ μ¬μ©ν μ μμΌλ©°, λ©μλ λλ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν μ μλ€.
κ·Έλ κΈ° λλ¬Έμ String, Number, Boolean μμ±μ ν¨μλ₯Ό new μ°μ°μμ ν¨κ² νΈμΆνμ¬ μΈμ€ν΄μ€λ₯Ό μμ±ν νμκ° μμΌλ©° κΆμ₯νμ§ μλλ€.
null, undefined λ λνΌ κ°μ²΄λ₯Ό μμ±νμ§ μκΈ° λλ¬Έμ κ°μ²΄μ²λΌ μ¬μ©νλ €κ³ νλ©΄ μλ¬κ° λλ€.
μ μκ°μ²΄λ μ½λκ° μ€νλκΈ° μ΄μ λ¨κ²μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ΄λ€ κ°μ²΄λ³΄λ€λ λ¨Όμ μμ±λλ νΉμν κ°μ²΄μ΄λ©°, μ΄λ€ κ°μ²΄μλ μνμ§ μμ μ΅μμ κ°μ²΄μ΄λ€.
μλ°μ€ν¬λ¦½νΈ νκ²½μ λ°λΌ μ§μΉνλ μ΄λ¦
| λΈλΌμ°μ νκ²½ | Node.js νκ²½ |
|---|---|
| window λλ self, this, frames | global |
// λΈλΌμ°μ νκ²½
globalThis === this // true
globalThis === window // true
globalThis === self // true
globalThis === frames // true
// Node.js νκ²½(12.0.0 μ΄μ)
globalThis === this // true
globalThis === global // trueglobalthis λ λΈλΌμ°μ νκ²½κ³Ό Node.js νκ²½μμ μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ€μν μλ³μλ₯Ό ν΅μΌν μλ³μμ΄λ€.
μ μ κ°μ²΄λ 3κ°μ§ μ’ λ₯μ νλ‘νΌν°λ₯Ό κ°μ§λ€.
- νμ€ λΉνΈμΈ κ°μ²΄ (
String,Nymber,Array,Object,Function)μ - νκ²½μ λ°λ₯Έ νΈμ€νΈ κ°μ²΄ ( ν΄λΌμ΄μΈνΈ Web API λλ Node.jsμ νΈμ€νΈ API )
- var ν€μλλ‘ μ μΈν μ μ λ³μμ μ μ ν¨μ
// λ¬Έμμ΄ 'F'λ₯Ό 16μ§μλ‘ ν΄μνμ¬ 10μ§μλ‘ λ³ννμ¬ λ°ννλ€.
window.parseInt('F', 16); // -> 15
// window.parseIntλ parseIntλ‘ νΈμΆν μ μλ€.
parseInt('F', 16); // -> 15
window.parseInt === parseInt; // -> true- κ°λ°μκ° μλμ μΌλ‘ μμ±ν μ μλ€. μ¦, μ μ κ°μ²΄λ₯Ό μμ±ν μ μλ μμ±μ ν¨μκ° μ 곡λμ§ μλλ€.
- νλ‘νΌν°λ₯Ό μ°Έμ‘°ν λ
windowλλglobalμ μλ΅ν μ μλ€.
// var ν€μλλ‘ μ μΈν μ μ λ³μ
var foo = 1;
console.log(window.foo); // 1
// μ μΈνμ§ μμ λ³μμ κ°μ μ묡μ μ μ.
=> λ³μ μ μΈ μμ΄ κ°μ ν λΉνλ©΄ κ·Έ λ³μλ μ묡μ μΌλ‘ μ μ λ³μκ° λλ€.
// barλ μ μ λ³μκ° μλλΌ μ μ κ°μ²΄μ νλ‘νΌν°λ€.
bar = 2; // window.bar = 2
console.log(window.bar); // 2
// μ μ ν¨μ
function baz() { return 3; }
console.log(window.baz()); // 3- μ μ κ°μ²΄λ
Object,String,Number,Boolean,Function,Array,RegExp,Date,Math,Promiseκ°μ λͺ¨λ νμ€ λΉνΈμΈ κ°μ²΄λ₯Ό νλ‘νΌν°λ‘ κ°μ§κ³ μλ€. = νλ‘κ·Έλ¨ μ½λ λ΄ μ΄λμλ μ¬μ© κ°λ₯νλ€. - μλ°μ€ν¬λ¦½νΈ μ€ν νκ²½μ λ°λΌ μΆκ°μ μΈ νλ‘νΌν°μ λ©μλλ₯Ό κ°λλ€.
| λΈλΌμ°μ νκ²½ | Node.js νκ²½ |
|---|---|
ν΄λΌμ΄μΈνΈ μ¬μ΄λ Web API λ₯Ό νΈμ€νΈ κ°μ²΄λ‘ μ 곡 (DOM,BOM,fetch,Web Storage λ± λ± ..) |
Node.js κ³ μ μ APIλ₯Ό νΈμ€νΈ κ°μ²΄λ‘ μ 곡 |
varν€μλλ‘ μ μΈν μ μ λ³μμ μ μΈνμ§ μμ λ³μμ κ°μ ν λΉν μ묡μ μ μ, κ·Έλ¦¬κ³ μ μ ν¨μλ μ μ κ°μ²΄μ νλ‘νΌν°κ° λλ€.
let foo = 123;
console.log(window.foo); // undefinedletμ΄λconstν€μλλ‘ μ μΈν μ μ λ³μλ μ μ κ°μ²΄μ νλ‘νΌν°κ° μλλ€.let,constλ μ μ λ μ컬 νκ²½μ μ μΈμ νκ²½ λ μ½λ λ΄μ μ‘΄μ¬νλ€.
- λΈλΌμ°μ νκ²½μ λͺ¨λ μλ°μ€ν¬λ¦½νΈ μ½λλ νλμ μ μ κ°μ²΄ `window`λ₯Ό 곡μ νλ€. - μ¬λ¬ κ°μ `script` νκ·Έλ₯Ό ν΅ν΄ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό λΆλ¦¬ν΄λ νλμ μ μ κ°μ²΄ `window` λ₯Ό 곡μ νλ κ²μ λ³ν¨μ΄ μλ€.
μ μ κ°μ²΄μ νλ‘νΌν°λ₯Ό μλ―Ένλ€. μ ν리μΌμ΄μ μ μμμ μ¬μ©νλ κ°μ μ 곡νλ€.
무νλλ₯Ό λνλ΄λ μ«μκ° Infinityλ₯Ό κ°λλ€.
// μ μ νλ‘νΌν°λ windowλ₯Ό μλ΅νκ³ μ°Έμ‘°ν μ μλ€.
console.log(window.Infinity === Infinity); // true
// μμ 무νλ
console.log(3/0); // Infinity
// μμ 무νλ
console.log(-3/0); // -Infinity
// Infinityλ μ«μκ°μ΄λ€.
console.log(typeof Infinity); // numberμ«μκ° μλ ( Not a Number ) μ λνλ΄λ μ«μκ° NaNμ κ°λλ€.
console.log(window.NaN); // NaN
console.log(Number('xyz')); // NaN
console.log(1 * 'string'); // NaN
console.log(typeof NaN); // number
// NaN νλ‘νΌν°λ Number.NaN νλ‘νΌν°μ κ°λ€.
console.log(NaN === Number.NaN); // trueμμ νμ
undefinedλ₯Ό κ°μΌλ‘ κ°λλ€.
console.log(window.undefined); // undefined
var foo;
console.log(foo); // undefined
console.log(typeof undefined); // undefinedλΉνΈμΈ μ μ ν¨μλ μ ν리μΌμ΄μ μ μμμ νΈμΆν μ μλ λΉνΈμΈ ν¨μλ‘μ μ μ κ°μ²΄μ λ©μλμ΄λ€.
evaluate νκ°νλ€μ μ€μλ§λ‘, λ¬Έμμ΄μ μ½λλ‘ ν΄μνκ³ μ€ννλ λ° μ¬μ©λλ ν¨μμ΄λ€.
eval ν¨μλ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό λνλ΄λ λ¬Έμμ΄μ μΈμλ‘ μ λ¬λ°λλ€.
// ννμμΈ λ¬Έ
eval('1 + 2;'); // -> 3
// ννμμ΄ μλ λ¬Έ
eval('var x = 5;'); // -> undefined
// eval ν¨μμ μν΄ λ°νμμ λ³μ μ μΈλ¬Έμ΄ μ€νλμ΄ x λ³μκ° μ μΈλμλ€.
console.log(x); // 5
// κ°μ²΄ 리ν°λ΄μ λ°λμ κ΄νΈλ‘ λλ¬μΌλ€.
const o = eval('({ a: 1 })');
console.log(o); // {a: 1}
// ν¨μ 리ν°λ΄μ λ°λμ κ΄νΈλ‘ λλ¬μΌλ€.
const f = eval('(function() { return 1; })');
console.log(f()); // 1μ λ¬λ°μ λ¬Έμμ΄ μ½λκ° ννμμ΄λΌλ©΄ λ¬Έμμ΄ μ½λλ₯Ό λ°νμμ νκ°νμ¬ κ°μ μμ±νκ³ , λ¬Έμ΄λΌλ©΄ λ¬Έμμ΄ μ½λλ₯Ό λ°νμμ μ€ννλ€.
console.log(eval('1 + 2; 3 + 4;')); // 7μΈμλ‘ μ λ¬λ°μ λ¬Έμμ΄ μ½λκ° μ¬λ¬ κ°μ λ¬ΈμΌλ‘ μ΄λ£¨μ΄μ Έ μλ€λ©΄ λͺ¨λ λ¬Έμ μ€νν λ€μ, λ§μ§λ§ κ²°κ³Όκ°μ λ°ννλ€.
const x = 1;
function foo() {
// eval ν¨μλ λ°νμμ foo ν¨μμ μ€μ½νλ₯Ό λμ μΌλ‘ μμ νλ€.
eval('var x = 2;');
console.log(x); // 2
}
foo();
console.log(x); // 1- μ μλ³μ
xλ₯Ό μ μΈνκ³ μ΄κΈ°ν fooν¨μ μ μΈ- μ΄ ν¨μ λ΄μμ
evalν¨μλ₯Ό μ¬μ©νμ¬var x = 2;λ₯Ό λμ μΌλ‘ μ€ν =>evalν¨μκ°fooν¨μμ μ§μ μ€μ½ν λ΄μμ μλ‘μ΄ λ³μxλ₯Ό μ μΈνκ³ 2λ‘ μ΄κΈ°ν
- μ΄ ν¨μ λ΄μμ
fooν¨μλ΄μconsole.log(x);λ μ΄κΈ°νλμμΌλ―λ‘, ν¨μμ μ§μ μ€μ½νμ μλxκ°μΈ 2κ° μΆλ ₯λ¨fooν¨μ νΈμΆ : ν¨μ λ΄μconsole.log(x);κ° μ€νλμ΄ 2 μΆλ ₯- λ§μ§λ§ μ€μ
console.log(x); // 1λ μ μ μ€μ½νμ μλxκ°μΈ 1 μΆλ ₯
eval ν¨μκ° λ°νμμ μ€μ½νλ₯Ό λμ μΌλ‘ μμ νκΈ° λλ¬Έμ foo ν¨μ λ΄λΆμ μΈλΆμμ xμ κ°μ΄ 2κ° λλ€.
const x = 1;
function foo() {
'use strict';
// strict modeμμ eval ν¨μλ κΈ°μ‘΄μ μ€μ½νλ₯Ό μμ νμ§ μκ³ eval ν¨μ μμ μ μ체μ μΈ μ€μ½νλ₯Ό μμ±νλ€.
eval('var x = 2; console.log(x);'); // 2
console.log(x); // 1
}
foo();
console.log(x); // 1strict modeμμ eval ν¨μλ κΈ°μ‘΄μ μ€μ½νλ₯Ό μμ νμ§ μκ³ eval ν¨μ μμ μ μ체μ μΈ μ€μ½νλ₯Ό μμ±νλ€.
const x = 1;
function foo() {
eval('var x = 2; console.log(x);'); // 2
// let, const ν€μλλ₯Ό μ¬μ©ν λ³μ μ μΈλ¬Έμ strict modeκ° μ μ©λλ€.
eval('const x = 3; console.log(x);'); // 3
console.log(x); // 2
}
foo();
console.log(x); // 1let, const ν€μλλ₯Ό μ¬μ©ν λ³μ μ μΈλ¬Έμ strict modeκ° μ μ©λλ€.
eval ν¨μλ₯Ό μ¬μ©νλ κ²μ 보μμ λ§€μ° μ·¨μ½νλ€. λν eval ν¨μλ₯Ό ν΅ν΄ μ€νλλ μ½λλ μ΅μ ν μνμ΄ λμ§ μμ μ²λ¦¬ μλκ° λ리λ€.
eval ν¨μμ μ¬μ©μ κΈμ§ν΄μΌ νλ€.
μ λ¬λ°μ μΈμκ° μ μμ μΈ μ νμμΈμ§ κ²μ¬νμ¬, μ νμμ΄λ©΄ true, 무νμμ΄λ©΄ falseλ₯Ό λ°ννλ€. μ λ¬λ°μ μΈμμ νμ
μ΄ μ«μκ° μλ κ²½μ°, μ«μλ‘ νμ
μ λ³νν ν κ²μ¬λ₯Ό μννλ€. μ΄λ μΈμκ° NaNμΌλ‘ νκ°λλ κ°μ΄λΌλ©΄ falseλ₯Ό λ°ννλ€.
// μΈμκ° μ νμμ΄λ©΄ trueλ₯Ό λ°ννλ€.
isFinite(0); // -> true
isFinite(2e64); // -> true
isFinite('10'); // -> true: '10' β 10
isFinite(null); // -> true: null β 0
// μΈμκ° λ¬΄νμ λλ NaNμΌλ‘ νκ°λλ κ°μ΄λΌλ©΄ falseλ₯Ό λ°ννλ€.
isFinite(Infinity); // -> false
isFinite(-Infinity); // -> false
// μΈμκ° NaNμΌλ‘ νκ°λλ κ°μ΄λΌλ©΄ falseλ₯Ό λ°ννλ€.
isFinite(NaN); // -> false
isFinite('Hello'); // -> false
isFinite('2005/12/12'); // -> falseisFinite(null) μ trueλ₯Ό λ°ννλ€.
console.log(+null); // 0nullμ μ«μ νμ
μΌλ‘ λ³ννλ©΄ 0μ΄ λλ€.
####isNaN
μ λ¬λ°μ μΈμκ° NaNμΈμ§ κ²μ¬νμ¬ κ·Έ κ²°κ³Όλ₯Ό λΆλ¦¬μΈ νμ
μΌλ‘ λ°ννλ€.
μ λ¬λ°μ μΈμμ νμ
μ΄ μ«μκ° μλ κ²½μ° μ«μλ‘ νμ
μ λ³νν ν κ²μ¬λ₯Ό μννλ€.
// μ«μ
isNaN(NaN); // -> true
isNaN(10); // -> false
// λ¬Έμμ΄
isNaN('blabla'); // -> true: 'blabla' => NaN
isNaN('10'); // -> false: '10' => 10
isNaN('10.12'); // -> false: '10.12' => 10.12
isNaN(''); // -> false: '' => 0
isNaN(' '); // -> false: ' ' => 0
// λΆλ¦¬μΈ
isNaN(true); // -> false: true β 1
isNaN(null); // -> false: null β 0
// undefined
isNaN(undefined); // -> true: undefined => NaN
// κ°μ²΄
isNaN({}); // -> true: {} => NaN
// date
isNaN(new Date()); // -> false: new Date() => Number
isNaN(new Date().toString()); // -> true: String => NaNμ λ¬λ°μ λ¬Έμμ΄ μΈμλ₯Ό λΆλ μμμ μ«μ, μ€μ(= μ μμ λΆμλ₯Ό ν¬ν¨νλ λͺ¨λ κ° )λ‘ ν΄μνμ¬ λ°ννλ€.
ν΄μνλ : parsing
// λ¬Έμμ΄μ μ€μλ‘ ν΄μνμ¬ λ°ννλ€.
parseFloat('3.14'); // -> 3.14
parseFloat('10.00'); // -> 10
// 곡백μΌλ‘ ꡬλΆλ λ¬Έμμ΄μ 첫 λ²μ§Έ λ¬Έμμ΄λ§ λ³ννλ€.
parseFloat('34 45 66'); // -> 34
parseFloat('40 years'); // -> 40
// 첫 λ²μ§Έ λ¬Έμμ΄μ μ«μλ‘ λ³νν μ μλ€λ©΄ NaNμ λ°ννλ€.
parseFloat('He was 40'); // -> NaN
// μλ€ κ³΅λ°±μ 무μλλ€.
parseFloat(' 60 '); // -> 60μ λ¬λ°μ λ¬Έμμ΄ μΈμλ₯Ό μ μλ‘ ν΄μνμ¬ λ°ννλ€.
μ μ : integer ν΄μ : parsing
// λ¬Έμμ΄μ μ μλ‘ ν΄μνμ¬ λ°ννλ€.
parseInt('10'); // -> 10
parseInt('10.123'); // -> 10parseInt(10); // -> 10
parseInt(10.123); // -> 10μ λ¬λ°μ μΈμκ° λ¬Έμμ΄μ΄ μλλ©΄ λ¬Έμμ΄λ‘ λ³νν λ€μ μ μλ‘ ν΄μνμ¬ λ°ννλ€.
// 10'μ 10μ§μλ‘ ν΄μνκ³ κ·Έ κ²°κ³Όλ₯Ό 10μ§μ μ μλ‘ λ°ννλ€
parseInt('10'); // -> 10
// '10'μ 2μ§μλ‘ ν΄μνκ³ κ·Έ κ²°κ³Όλ₯Ό 10μ§μ μ μλ‘ λ°ννλ€
parseInt('10', 2); // -> 2
// '10'μ 8μ§μλ‘ ν΄μνκ³ κ·Έ κ²°κ³Όλ₯Ό 10μ§μ μ μλ‘ λ°ννλ€
parseInt('10', 8); // -> 8
// '10'μ 16μ§μλ‘ ν΄μνκ³ κ·Έ κ²°κ³Όλ₯Ό 10μ§μ μ μλ‘ λ°ννλ€
parseInt('10', 16); // -> 16λ λ²μ§Έ μΈμλ‘ μ§λ²μ λνλ΄λ κΈ°μ ( 2 ~ 36 )λ₯Ό μ λ¬ν μ μλ€. κΈ°μλ₯Ό μ§μ νλ©΄ 첫 λ²μ§Έ μΈμλ‘ μ λ¬λ λ¬Έμμ΄μ ν΄λΉ κΈ°μμ μ«μλ‘ ν΄μνμ¬ λ°ννλ€. λ°νκ°μ μΈμ λ 10μ§μμ΄λ©°, κΈ°μλ₯Ό μλ΅νλ©΄ 첫 λ²μ§Έ μΈμλ‘ μ λ¬λ λ¬Έμμ΄μ 10μ§μλ‘ ν΄μνμ¬ λ°ννλ€.
const x = 15;
// 10μ§μ 15λ₯Ό 2μ§μλ‘ λ³ννμ¬ κ·Έ κ²°κ³Όλ₯Ό λ¬Έμμ΄λ‘ λ°ννλ€.
x.toString(2); // -> '1111'
// λ¬Έμμ΄ '1111'μ 2μ§μλ‘ ν΄μνκ³ κ·Έ κ²°κ³Όλ₯Ό 10μ§μ μ μλ‘ λ°ννλ€
parseInt(x.toString(2), 2); // -> 15
// 10μ§μ 15λ₯Ό 8μ§μλ‘ λ³ννμ¬ κ·Έ κ²°κ³Όλ₯Ό λ¬Έμμ΄λ‘ λ°ννλ€.
x.toString(8); // -> '17'
// λ¬Έμμ΄ '17'μ 8μ§μλ‘ ν΄μνκ³ κ·Έ κ²°κ³Όλ₯Ό 10μ§μ μ μλ‘ λ°ννλ€
parseInt(x.toString(8), 8); // -> 15
// 10μ§μ 15λ₯Ό 16μ§μλ‘ λ³ννμ¬ κ·Έ κ²°κ³Όλ₯Ό λ¬Έμμ΄λ‘ λ°ννλ€.
x.toString(16); // -> 'f'
// λ¬Έμμ΄ 'f'λ₯Ό 16μ§μλ‘ ν΄μνκ³ κ·Έ κ²°κ³Όλ₯Ό 10μ§μ μ μλ‘ λ°ννλ€
parseInt(x.toString(8), 8); // -> 15
// μ«μκ°μ λ¬Έμμ΄λ‘ λ³ννλ€.
x.toString(); // -> '15'
// λ¬Έμμ΄ '15'λ₯Ό 10μ§μλ‘ ν΄μνκ³ κ·Έ κ²°κ³Όλ₯Ό 10μ§μ μ μλ‘ λ°ννλ€
parseInt(x.toString()); // -> 15κΈ°μλ₯Ό μ§μ νμ¬ 10μ§μ μ«μλ₯Ό ν΄λΉ κΈ°μμ λ¬Έμμ΄λ‘ λ³ννμ¬ λ°ννκ³ μΆμ λλ Number.prototype.toString λ©μλλ₯Ό μ¬μ©νλ€.
// 16μ§μ 리ν°λ΄ '0xf'λ₯Ό 16μ§μλ‘ ν΄μνκ³ 10μ§μ μ μλ‘ κ·Έ κ²°κ³Όλ₯Ό λ°ννλ€.
parseInt('0xf'); // -> 15
// μ μ½λμ κ°λ€.
parseInt('f', 16); // -> 15λ λ²μ§Έ μΈμλ‘ μ§λ²μ λνλ΄λ κΈ°μλ₯Ό μ§μ νμ§ μλλΌλ 첫 λ²μ§Έ μΈμλ‘ μ λ¬λ λ¬Έμμ΄μ΄ 0x λλ 0X λ‘ μμνλ 16μ§μ 리ν°λ΄μ΄λΌλ©΄ 16μ§μλ‘ ν΄μνμ¬ 10μ§μ μ μλ‘ λ°ννλ€.
// 2μ§μ 리ν°λ΄(0bλ‘ μμ)μ μ λλ‘ ν΄μνμ§ λͺ»νλ€. 0 μ΄νκ° λ¬΄μλλ€.
parseInt('0b10'); // -> 0
// 8μ§μ 리ν°λ΄(ES6μμ λμ
. 0oλ‘ μμ)μ μ λλ‘ ν΄μνμ§ λͺ»νλ€. 0 μ΄νκ° λ¬΄μλλ€.
parseInt('0o10'); // -> 02μ§μ 리ν°λ΄κ³Ό 8μ§μ 리ν°λ΄μ μ λλ‘ ν΄μνμ§ λͺ»νλ€.
// λ¬Έμμ΄ '10'μ 2μ§μλ‘ ν΄μνλ€.
parseInt('10', 2); // -> 2
// λ¬Έμμ΄ '10'μ 8μ§μλ‘ ν΄μνλ€.
parseInt('10', 8); // -> 8ES5 μμλ λΉλ‘ κΈμ§λμμμ§λ§ "0" μΌλ‘ μμνλ μ«μλ₯Ό 8μ§μλ‘ ν΄μνλ€.
ES6 λΆν° "0" μΌλ‘ μμνλ μ«μλ₯Ό 8μ§μλ‘ ν΄μνμ§ μκ³ 10μ§μλ‘ ν΄μνλ€.
λ¬Έμμ΄μ 8μ§μλ‘ ν΄μνλ €λ©΄ μ§μλ₯Ό λ°λμ μ§μ ν΄μΌ νλ€.
// 'A'λ 10μ§μλ‘ ν΄μν μ μλ€.
parseInt('A0'); // -> NaN
// '2'λ 2μ§μλ‘ ν΄μν μ μλ€.
parseInt('20', 2); // -> NaN첫 λ²μ§Έ μΈμλ‘ μ λ¬ν λ¬Έμμ΄μ 첫 λ²μ§Έ λ¬Έμκ° ν΄λΉ μ§μμ μ«μλ‘ λ³νλ μ μλ€λ©΄ NaNμ λ°ννλ€.
// 10μ§μλ‘ ν΄μν μ μλ 'A' μ΄νμ λ¬Έμλ λͺ¨λ 무μλλ€.
parseInt('1A0'); // -> 1
// 2μ§μλ‘ ν΄μν μ μλ '2' μ΄νμ λ¬Έμλ λͺ¨λ 무μλλ€.
parseInt('102', 2); // -> 2
// 8μ§μλ‘ ν΄μν μ μλ '8' μ΄νμ λ¬Έμλ λͺ¨λ 무μλλ€.
parseInt('58', 8); // -> 5
// 16μ§μλ‘ ν΄μν μ μλ 'G' μ΄νμ λ¬Έμλ λͺ¨λ 무μλλ€.
parseInt('FG', 16); // -> 15첫 λ²μ§Έ μΈμλ‘ μ λ¬ν λ¬Έμμ΄μ λ λ²μ§Έ λ¬ΈμλΆν° ν΄λΉ μ§μλ₯Ό λνλ΄λ μ«μκ° μλ λ¬Έμμ λ§μ£ΌμΉλ©΄ μ΄ λ¬Έμμ λ€μ λ¬Έμλ€μ μ λΆ λ¬΄μλλ©° ν΄μλ μ μκ°λ§ λ°ννλ€.
// 곡백μΌλ‘ ꡬλΆλ λ¬Έμμ΄μ 첫 λ²μ§Έ λ¬Έμμ΄λ§ λ³ννλ€.
parseInt('34 45 66'); // -> 34
parseInt('40 years'); // -> 40
// 첫 λ²μ§Έ λ¬Έμμ΄μ μ«μλ‘ λ³νν μ μλ€λ©΄ NaNμ λ°ννλ€.
parseInt('He was 40'); // -> NaN
// μλ€ κ³΅λ°±μ 무μλλ€.
parseInt(' 60 '); // -> 60첫 λ²μ§Έ μΈμλ‘ μ λ¬ν λ¬Έμμ΄μ κ³΅λ°±μ΄ μλ€λ©΄ 첫 λ²μ¬ λ¬Έμμ΄λ§ ν΄μνμ¬ λ°ννλ©° μλ€ κ³΅λ°±μ 무μλλ€. 첫 λ²μ§Έ λ¬Έμμ΄μ μ«μλ‘ ν΄μν μ μλ κ²½μ° NaNμ λ°ννλ€.
encodeURI ν¨μλ μμ ν URI ( Unifrom Resource Identifier ) λ₯Ό λ¬Έμμ΄λ‘ μ λ¬λ°μ μ΄μ€μΌμ΄ν μ²λ¦¬λ₯Ό μν΄ μΈμ½λ©νλ€.
μΉμμ μμ νκ² URI λ₯Ό μ μ‘νκ±°λ λ°μμ¬ λ μ¬μ©λ©λλ€.
μ΄μ€μΌμ΄ν μ²λ¦¬ : λ€νΈμν¬λ₯Ό ν΅ν΄ μ 보λ₯Ό 곡μ ν λ μ΄λ€ μμ€ν μμλ μ½μ μ μλ μμ€ν€ λ¬Έμ μ μΌλ‘ λ³ννλ κ²
μνλ²³, 09 μ«μ, -_.!*`() λ μ΄μ€μΌμ΄ν μ²λ¦¬μμ μ μΈλλ€.
// μμ ν URI
const uri = 'http://example.com?name=μ΄μ
λͺ¨&job=programmer&teacher';
// encodeURI ν¨μλ μμ ν URIλ₯Ό μ λ¬λ°μ μ΄μ€μΌμ΄ν μ²λ¦¬λ₯Ό μν΄ μΈμ½λ©νλ€.
const enc = encodeURI(uri);
console.log(enc);
// http://example.com?name=%EC%9D%B4%EC%9B%85%EB%AA%A8&job=programmer&teacherconst uri = 'http://example.com?name=μ΄μ
λͺ¨&job=programmer&teacher';
// encodeURI ν¨μλ μμ ν URIλ₯Ό μ λ¬λ°μ μ΄μ€μΌμ΄ν μ²λ¦¬λ₯Ό μν΄ μΈμ½λ©νλ€.
const enc = encodeURI(uri);
console.log(enc);
// http://example.com?name=%EC%9D%B4%EC%9B%85%EB%AA%A8&job=programmer&teacher
// decodeURI ν¨μλ μΈμ½λ©λ μμ ν URIλ₯Ό μ λ¬λ°μ μ΄μ€μΌμ΄ν μ²λ¦¬ μ΄μ μΌλ‘ λμ½λ©νλ€.
const dec = decodeURI(enc);
console.log(dec);
// http://example.com?name=μ΄μ
λͺ¨&job=programmer&teacherURI ꡬμ±μμ(component)λ₯Ό μΈμλ‘ μ λ¬λ°μ μΈμ½λ©νλ€.
λ§€κ°λ³μλ‘ μ λ¬λ URI κ΅¬μ± μμλ₯Ό λμ½λ©νλ€.
μνλ²³, 09 μ«μ, -_.!*`() λ μ΄μ€μΌμ΄ν μ²λ¦¬μμ μ μΈλλ€.
// URIμ 쿼리 μ€νΈλ§
const uriComp = 'name=μ΄μ
λͺ¨&job=programmer&teacher';
// encodeURIComponent ν¨μλ μΈμλ‘ μ λ¬λ°μ λ¬Έμμ΄μ URIμ ꡬμ±μμμΈ μΏΌλ¦¬ μ€νΈλ§μ μΌλΆλ‘ κ°μ£Όνλ€.
// λ°λΌμ 쿼리 μ€νΈλ§ ꡬλΆμλ‘ μ¬μ©λλ =, ?, &κΉμ§ μΈμ½λ©νλ€.
let enc = encodeURIComponent(uriComp);
console.log(enc);
// name%3D%EC%9D%B4%EC%9B%85%EB%AA%A8%26job%3Dprogrammer%26teacher
let dec = decodeURIComponent(enc);
console.log(dec);
// μ΄μ
λͺ¨&job=programmer&teacher
// encodeURI ν¨μλ μΈμλ‘ μ λ¬λ°μ λ¬Έμμ΄μ μμ ν URIλ‘ κ°μ£Όνλ€.
// λ°λΌμ 쿼리 μ€νΈλ§ ꡬλΆμλ‘ μ¬μ©λλ =, ?, &λ₯Ό μΈμ½λ©νμ§ μλλ€.
enc = encodeURI(uriComp);
console.log(enc);
// name=%EC%9D%B4%EC%9B%85%EB%AA%A8&job=programmer&teacher
dec = decodeURI(enc);
console.log(dec);
// name=μ΄μ
λͺ¨&job=programmer&teacherencodeURIComponent |
encodeURI |
|---|---|
| μΈμλ‘ μ λ¬λ λ¬Έμμ΄μ URIμ ꡬμ±μμμΈ μΏΌλ¦¬ μ€νΈλ§μ μΌλΆλ‘ κ°μ£Ό | λ§€κ°λ³μλ‘ μ λ¬λ λ¬Έμμ΄μ μμ ν URI μ 체λΌκ³ κ°μ£Ό |
=,?,&κΉμ§ μΈμ½λ© |
=,?,& μΈμ½λ© νμ§ μμ |
=,?,& λ 쿼리 μ€νΈλ§ ꡬλΆμλ‘ μ¬μ©λλ€.
###21.4.3 μ묡μ μ μ
var x = 10; // μ μ λ³μ
function foo () {
// μ μΈνμ§ μμ μλ³μμ κ°μ ν λΉ
y = 20; // window.y = 20;
}
foo();
// μ μΈνμ§ μμ μλ³μ yλ₯Ό μ μμμ μ°Έμ‘°ν μ μλ€.
console.log(x + y); // 30μ묡μ μ μμ΄λ, μ΄λ€ λ³μλ₯Ό μ μΈ μμ΄ λ°λ‘ μ¬μ©νλ©΄, κ·Έ λ³μκ° μ μ κ°μ²΄μ νλ‘νΌν°λ‘ μΆκ°λλ νμ
y=20 μ΄ μ€νλλ©΄ μλ¬κ° λ°μν κΉμ!? => no
μ΄μ κ° λ¬΄μμΌκΉμ? => μ묡μ μ μ νμμ΄ μΌμ΄λκΈ° λλ¬Έμ
μΌμ΄λλ μΌ :
fooν¨μ νΈμΆ- μλ°μ€ν¬λ¦½νΈ μμ§μ
y=20μwindow.y = 20μΌλ‘ ν΄μνμ¬ μ μ κ°μ²΄μ νλ‘νΌν°λ₯Ό λμ μμ±νλ€. yλ μ μ κ°μ²΄μ νλ‘νΌν°κ° λμ΄ μ μ λ³μμ²λΌ λμνλ€.
// μ μ λ³μ xλ νΈμ΄μ€ν
μ΄ λ°μνλ€.
console.log(x); // undefined
// μ μ λ³μκ° μλλΌ λ¨μ§ μ μ κ°μ²΄μ νλ‘νΌν°μΈ yλ νΈμ΄μ€ν
μ΄ λ°μνμ§ μλλ€.
console.log(y); // ReferenceError: y is not defined
var x = 10; // μ μ λ³μ
function foo () {
// μ μΈνμ§ μμ μλ³μμ κ°μ ν λΉ
y = 20; // window.y = 20;
}
foo();
// μ μΈνμ§ μμ μλ³μ yλ₯Ό μ μμμ μ°Έμ‘°ν μ μλ€.
console.log(x + y); // 30νμ§λ§ μμ 21-37 μ yλ λ³μ μ μΈ μμ΄ μ μ κ°μ²΄μ νλ‘νΌν°λ‘ μΆκ°λμμ λΏμ΄λ€. λ°λΌμ yλ λ³μκ° μλκΈ° λλ¬Έμ λ³μ νΈμ΄μ€ν
μ΄ λ°μνμ§ μλλ€.
var x = 10; // μ μ λ³μ
function foo () {
// μ μΈνμ§ μμ μλ³μμ κ°μ ν λΉ
y = 20; // window.y = 20;
console.log(x + y);
}
foo(); // 30
console.log(window.x); // 10
console.log(window.y); // 20
delete x; // μ μ λ³μλ μμ λμ§ μλλ€.
delete y; // νλ‘νΌν°λ μμ λλ€.
console.log(window.x); // 10
console.log(window.y); // undefinedλ¨μ§ νλ‘νΌν°μΈ yλ deleteμ°μ°μλ‘ μμ ν μ μλ€.
μ μ λ³μλ νλ‘νΌν°μ΄μ§λ§ delete μ°μ°μλ‘ μμ ν μ μλ€.
