μλ°μ€ν¬λ¦½νΈ κ°μ²΄λ ν¬κ² 3κ°μ κ°μ²΄λ‘ λΆλ₯ κ°λ₯.
νμ€ λΉνΈμΈ κ°μ²΄
λECMAScript μ¬μ
μ μ μλ κ°μ²΄λ₯Ό λ§νλ©°, μ ν리μΌμ΄μ μ μμ κ³΅ν΅ κΈ°λ₯μ μ 곡νλ€.
νμ€ λΉνΈμΈ κ°μ²΄
λECMAScript μ¬μ
μ μ μλ κ°μ²΄μ΄λ―λ‘ μλ°μ€ν¬λ¦½νΈ μ€ννκ²½(λΈλΌμ°μ λλ Node.js νκ²½)κ³Ό κ΄κ³μμ΄ μΈμ λ μ¬μ©ν μ μμ.
νμ€ λΉνΈμΈ κ°μ²΄
λ μ μ κ°μ²΄μ νλ‘νΌν°λ‘μ μ 곡λλ€. λ°λΌμ λ³λμ μ μμ΄ μ μ λ³μμ²λΌ μΈμ λ μ°Έμ‘° κ°λ₯.
νΈμ€νΈ κ°μ²΄
λECMAScript μ¬μ
μ μ μλμ΄ μμ§ μμ§λ§ μλ°μ€ν¬λ¦½νΈ μ€νν νκ²½(λΈλΌμ°μ νκ²½ λλ Node.js νκ²½)μμ μΆκ°λ‘ μ 곡νλ κ°μ²΄λ₯Ό λ§νλ€.
λΈλΌμ°μ νκ²½μμλDOM
,BOM
,Canvas
,XMLHttpRequest
,fetch
,requestAnimationFrame
,SVG
,Web Storage
,Web Component
,Web Worker
μ κ°μ ν΄λΌμ΄μΈνΈ μ¬μ΄λ Web APIλ₯Ό νΈμ€νΈ κ°μ²΄λ‘ μ 곡νκ³ ,
Node.jsνκ²½μμλNode.js κ³ μ μ API
λ₯Ό νΈμ€νΈ κ°μ²΄λ‘ μ 곡νλ€.
μ¬μ©μ μ μ κ°μ²΄
λνμ€ λΉνΈμΈ κ°μ²΄
μνΈμ€νΈ κ°μ²΄
μ²λΌ κΈ°λ³Έ μ 곡λλ κ°μ²΄κ° μλ μ¬μ©μκ° μ§μ μ μν κ°μ²΄λ₯Ό λ§νλ€.
μλ°μ€ν¬λ¦½νΈλ
Object
String
Number
Boolean
Symbol
Date
Math
RegExp
Array
Map/Set
WeakMap
WeakSet
Function
Promise
Reflect
,Proxy
JSON
Error
λ± 40μ¬ κ°μνμ€ λΉνΈμΈ κ°μ²΄
λ₯Ό μ 곡νλ€.
Math
Reflect
Json
μ μ μΈν νμ€ λΉνΈμΈ κ°μ²΄λ λͺ¨λ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ κ°μ²΄λ€.
μμ±μ ν¨μμΈ
νμ€ λΉνΈμΈ κ°μ²΄
κ° μμ±ν μΈμ€ν΄μ€μ νλ‘ν νμ μνμ€ λΉνΈμΈ κ°μ²΄
μ prototype νλ‘νΌν°μ λ°μΈλ©λ κ°μ²΄λ€. μλ₯Ό λ€μ΄,νμ€ λΉνΈμΈ κ°μ²΄
μΈ Stringμ μμ±μ ν¨μλ‘μ νΈμΆνμ¬ μμ±ν String μΈμ€ν΄μ€μ νλ‘ν νμ μ String.prototypeμ΄λ€.
// String μμ±μ ν¨μμ μν String κ°μ²΄ μμ±.
const strObj = new String('Noh'); // String {"Noh"}
// String μμ±μ ν¨μλ₯Ό ν΅ν΄ μμ±ν strObj κ°μ²΄μ νλ‘ν νμ
μ String.prototypeμ΄λ€.
console.log(Object.getPrototypeOf(strObj) === String.prototype); // true
νμ€ λΉνΈμΈ κ°μ²΄
μΈNumber
μΈμ€ν΄μ€λprototype νλ‘νΌν°
μ λ°μΈλ©λ κ°μ²΄μ λ€μν κΈ°λ₯μ λΉνΈμΈ νλ‘ν νμ λ©μλλ₯Ό μ 곡νλ€.
νμ€ λΉνΈμΈ κ°μ²΄
μΈNumber
λ μΈμ€ν΄μ€ μμ΄ μ μ μΌλ‘ νΈμΆν μ μλ μ μ λ©μλ μ 곡
// 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
λ¬Έμμ΄
μ«μ
λΆλ¦¬μΈ
λ±μ μμκ° μλλ°λλ¬Έμμ΄
μ«μ
λΆλ¦¬μΈ
κ°μ²΄λ₯Ό μμ±νλString
Number
Boolean
λ±μ νμ€ λΉνΈμΈ μμ±μ ν¨μκ° μ‘΄μ¬νλ μ΄μ κ° λ¬΄μμΌκΉ?
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
κ°μ²΄μ νλ‘νΌν° λ©μλμ μ κ·Όνλ©΄
λνΌ κ°μ²΄
μΈString μμ±μ ν¨μ
μ μΈμ€ν΄μ€ μμ±λκ³ λ¬Έμμ΄μλνΌ κ°μ²΄
μ[[StringData]]
λ΄λΆ μ¬λ‘―μ ν λΉλλ€.
λ¬Έμμ΄ λνΌ κ°μ²΄μΈString μμ±μ ν¨μ
μ μΈμ€ν΄μ€String.prototype
μ λ©μλλ₯Ό μμλ°μ μ¬μ©ν μ μμ.
κ·Έ νλνΌ κ°μ²΄
μ μ²λ¦¬ μ’ λ£λλ©΄λνΌ κ°μ²΄
μ[[StringData]]
λ΄λΆ μ¬λ‘―μ ν λΉλ μμκ°μΌλ‘ λ€μ λλμμ¨λ€. μ¦,λνΌ κ°μ²΄
λ κ°λΉμ§ 컬λ μ μ΄ λλ€.
const bool = true;
console.log(bool.toValueof)
console.log(bool.toString())
console.log(typeof bool, bool)
const num = 2
console.log(num.toFixed()); // 2
console.log(typeof num, num)
μ«μ
λΆλ¦¬μΈ
μμ νμ λν, μμλ¬Έμμ΄
νμ κ³Ό κ°μ λ°©μμΌλ‘λνΌ κ°μ²΄
μμ±νκ³ κ°κ°λνΌκ°μ²΄
μ[[NumberData]]
[[BooleanData]]
μ ν λΉ, μ²λ¦¬ μ’ λ£λλ©΄ μμ κ°μΌλ‘ λλμ μ¨λ€. μ¦,λνΌ κ°μ²΄
λ κ°λΉμ§ 컬λ μ μ΄ λλ€.
μ μ κ°μ²΄
λ μ½λκ° μ€νλκΈ° μ΄μ λ¨κ³μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ΄λ€ κ°μ²΄λ³΄λ€λ λ¨Όμ μμ±λλ νΉμν κ°μ²΄μ΄λ©°, μ΄λ€ κ°μ²΄μλ μνμ§ μμ μ΅μμ κ°μ²΄
μ μ κ°μ²΄
λ μλ°μ€ν¬λ¦½νΈ νκ²½μ λ°λΌ μ§μΉνλ μ΄λ¦μ΄ μ κ°κ° λΈλΌμ°μ νκ²½μμλwindow
(λλself
this
frames
) Node.js νκ²½μμλglobal
μ΄μ μ κ°μ²΄
λ₯Ό κ°λ¦¬ν¨λ€.
μ μ κ°μ²΄
λνμ€ λΉνΈμΈ κ°μ²΄
νΈμ€νΈ κ°μ²΄(ν΄λΌμ΄μΈνΈ Web API λλ Node.jsμ νΈμ€νΈ API)
, 그리κ³var
λ‘ μ μΈν μ μ λ³μμ μ μ ν¨μλ₯Ό νλ‘νΌν°λ‘ κ°λλ€.
μ μ κ°μ²΄
λ κ³μΈ΅μ ꡬ쑰μ μ΄λ€ κ°μ²΄μλ μνμ§ μμ λͺ¨λ λΉνΈμΈ κ°μ²΄(νμ€ λΉνΈμΈ κ°μ²΄μ νΈμ€νΈ κ°μ²΄)μ μ΅μμ κ°μ²΄λ€.μ μ κ°μ²΄
κ° μ΅μμ κ°μ²΄λΌλ κ²μ νλ‘ν νμ μμ κ΄κ³μμμ μ΅μμ κ°μ²΄λΌλ μλ―Έκ° μλλ€.μ μ κ°μ²΄
μμ°μ μ΄λ€ κ°μ²΄μ νλ‘νΌν°λ μλλ©° κ°μ²΄μ κ³μΈ΅μ ꡬ쑰μ νμ€ λΉνΈμΈ κ°μ²΄μ νΈμ€νΈ κ°μ²΄λ₯Ό νλ‘νΌν°λ‘ μμ νλ€λ κ²μ λ§νλ€.
β μ μ κ°μ²΄
λ κ°λ°μκ° μλμ μΌλ‘ μμ±ν μ μλ€. μ¦, μ μ κ°μ²΄
λ₯Ό μμ±ν μ μλ μμ±μ ν¨μκ° μ 곡λμ§ μλλ€.
β μ μ κ°μ²΄
μ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν λ window(λλ global)
λ₯Ό μλ΅ν μ μλ€.
// λ¬Έμμ΄ 'F'λ₯Ό 16μ§μλ‘ ν΄μνμ¬ 10μ§μλ‘ λ³ννμ¬ λ³ννλ€.
window.paresInt('F', 16); // 15
// window.parseIntλ parseIntλ‘ νΈμΆν μ μλ€.
parseInt('F', 16); // 15
window.parseInt === parseInt; // true
β μ μ κ°μ²΄
λ Object
String
Number
Function
κ°μ λͺ¨λ νμ€ λΉνΈμΈ κ°μ²΄
λ₯Ό νλ‘νΌν°λ‘ κ°μ§κ³ μλ€.
β μλ°μ€ν¬λ¦½νΈ μ€ν νκ²½(λΈλΌμ°μ νκ²½ λλ Node.js νκ²½)μ λ°λΌ μΆκ°μ μΌλ‘ νλ‘νΌν°μ λ©μλλ₯Ό κ°λλ€.
β var
ν€μλλ‘ μ μΈν μ μ λ³μ
μ μ μΈνμ§ μμ λ³μμ κ°μ ν λΉν μ묡μ μ μ
, κ·Έλ¦¬κ³ μ μ ν¨μ
λ μ μ κ°μ²΄μ νλ‘νΌν°κ° λλ€.
// 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
β let
μ΄λ const
ν€μλλ‘ μ μΈν μ μ λ³μλ μ μ κ°μ²΄μ νλ‘νΌν°κ° μλλ€.
let
μ΄λconst
ν€μλλ‘ μ μΈν μ μ λ³μλ 보μ΄μ§ μλ κ°λ μ μΈ λΈλ‘(μ μ λ μ컬 νκ²½μ μ μΈμ νκ²½ λ μ½λ)λ΄μ μ‘΄μ¬νκ² λλ€.
β λΈλΌμ°μ νκ²½μ λͺ¨λ μλ°μ€ν¬λ¦½νΈ μ½λλ νλμ μ μ κ°μ²΄ windowλ₯Ό 곡μ νλ€.
ES11 μμ λμ λ
globalThis
λ λΈλΌμ°μ νκ²½κ³Ό Node.js νκ²½μμ μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ λ€μν μλ³μλ₯Ό ν΅μΌν μλ³μλ€.globalThis
λ νμ€ μ¬μμ΄λ―λ‘ ECMAScript νμ€ μ¬μμ μ€μνλ λͺ¨λ νκ²½μμ μ¬μ©ν μ μλ€.
// λΈλΌμ°μ νκ²½
globalThis === this // true
globalThis === window // true
globalThis === self // true
globalThis === frames // true
// Node.js νκ²½(12.0.0 μ΄μ)
globalThis === this // true
globalThis === global // true
λΉνΈμΈ μ μ νλ‘νΌν°
λ μ μ κ°μ²΄μ νλ‘νΌν°λ₯Ό μλ―Έ.
β Infinity
Infinity
νλ‘νΌν°λ 무νλλ₯Ό λνλ΄λ μ«μκ°Infinity
λ₯Ό κ°λλ€.
// μ μ νλ‘νΌν°λ windowλ₯Ό μλ΅νκ³ μ°Έμ‘°ν μ μλ€.
console.log(window.Infinity === Infinity); // true
// μμ 무νλ
console.log(3/0); // Infinity
// μμ 무νλ
console.log(-3/0); // -Infinity
// Infinityλ μ«μκ°μ΄λ€.
console.log(typeof Infinity); // number
β NaN
NaN
νλ‘νΌν°λ μ«μκ° μλ(Not-a-Number)μ λνλ΄λ μ«μκ°NaN
μ κ°λλ€.NaN
νλ‘νΌν°λNumber
NaN
νλ‘νΌν°μ κ°λ€.
console.log(window.NaN); // NaN
console.log(Number('xyz')); // NaN
console.log(1 * 'string'); // NaN
console.log(typeof NaN); // number
β undefined
undefined
νλ‘νΌν°λ μμ νμundefined
λ₯Ό κ°μΌλ‘ κ°λλ€.
console.log(window.undefined); // undefined
var foo;
console.log(foo); // undefined
console.log(typeof undefined); // undefined
λΉνΈμΈ μ μ ν¨μ
λ μ ν리μΌμ΄μ μ μμμ νΈμΆν μ μλ λΉνΈμΈ ν¨μλ‘μ μ μ κ°μ²΄μ λ©μλ
β eval
eval
ν¨μλ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό λνλ΄λ λ¬Έμμ΄μ μΈμλ‘ μ λ¬λ°μ, μ λ¬λ°μ λ¬Έμμ΄ μ½λκ° ννμ μ΄λΌλ©΄ evalν¨μλ λ¬Έμμ΄ μ½λλ₯Ό λ°νμμ νκ°νμ¬ κ°μ μμ±νκ³ ,
μ λ¬λ°μ μΈμκ° ννμμ΄ μλ λ¬Έμ΄λΌλ©΄ 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
μ¬λ¬κ°μ λ¬ΈμΌλ‘ μ΄λ£¨μ΄μ Έ μλ€λ©΄ λͺ¨λ λ¬Έμ μ€νν λ€μ, λ§μ§λ§ κ²°κ³Όκ°μ λ°ννλ€.
eval('1 + 2; 3 + 4'); // 7
eval
ν¨μλ μμ μ΄ νΈμΆλ μμΉμ ν΄λΉνλ κΈ°μ‘΄μ μ€μ½νλ₯Ό λ°νμμ λμ μΌλ‘ μμ νλ€.
const x = 1;
function foo() {
// eval ν¨μλ λ°νμμ foo ν¨μμ μ€μ½νλ₯Ό λμ μΌλ‘ μμ νλ€.
eval('var x = 2;');
console.log(x); // 2
}
foo();
console.log(x); // 1
strict mode
μμλeval
ν¨μλ κΈ°μ‘΄μ μ€μ½νλ₯Ό μμ νμ§ μκ³eval
ν¨μ μμ μ μ체μ μΈ μ€μ½νλ₯Ό μμ±νλ€.
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); // 1
μΈμλ‘ μ λ¬λ°μ λ¬Έμμ΄ μ½λκ° let, const ν€μλλ₯Ό μ¬μν λ³μ μ μΈλ¬Έμ΄λΌλ©΄ μ묡μ μΌλ‘ strict modeκ° μ μ©λλ€.
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()'
conosole.log(x); // 1
eval
ν¨μλ 보μμ λ§€μ° μ·¨μ½νλ€ λν,eval
ν¨μλ₯Ό ν΅ν΄ μ€νλλ μ½λλ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ΅μ νκ° μνλμ§ μμΌλ―λ‘ μΌλ°μ μΈ μ½λ μ€νμ λΉν΄ μ²λ¦¬ μλκ° λλΌλ€. λ°λΌμeval
ν¨μμ μ¬μ©μ κΈμ§ν΄μΌ νλ€.
β isFinite
μΈμκ° μ μμ μΈ μ νμμ΄λ©΄
true
λ₯Ό λ°ν 무νμ μ΄λ©΄false
λ₯Ό λ°, μ λ¬λ°μ μΈμμ νμ μ΄ μ«μκ° μλ κ²½μ°, μ«μλ‘ νμ μ λ³ν μ΄λ μΈμκ°NaN
μΌλ‘ νκ°λλ κ°false
κ° λ°ν
// μΈμκ° μ νμμ΄λ©΄ trueλ₯Ό λ°ννλ€.
isFinite(0); // true
isFinite(264) // true
isFinite('10'); // '10' -> 10 true
isFintie(null); // null -> 0 true
// μΈμκ° λ¬΄νμ λλ NaNμΌλ‘ νκ°λλ κ°μ΄λΌλ©΄ falseλ₯Ό λ°ννλ€.
isFintie(Infinity); // false
isFintie(-Infinity); // false
// μΈμκ° NaNμΌλ‘ νκ°λλ κ°μ΄λΌλ©΄ falseλ₯Ό λ°ννλ€.
isFintie(NaN); // false
isFintie('Hello'); // false
isFintie('2005/12/12') // false
β isNaN
μ λ¬λ°μ μΈμκ°
NaN
μΈμ§ κ²μ¬νμ¬ κ·Έ κ²°κ³Όλ₯Ό λΆλ¦¬μΈ νμ μΌλ‘ λ°ννλ€. μ λ¬λ°μ μΈμμ±μ μ΄ μ«μκ° μλ κ²½μ° μ«μλ‘ νμ μ λ³νν ν κ²μ¬λ₯Ό μννλ€.
// μ«μ
isNaN(NaN); // true
isNaN(10); // false
// λ¬Έμμ΄
isNaN('blabla'); // true: 'blabla' -> NaN
isNaN('10'); // false : '10' -> 10
isNaN('10.22'); // false : '10.22' -> 10.22
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
β parseFloat
μ λ¬λ°μ λ¬Έμμ΄ μΈμλ₯Ό λΆλ μμμ μ«μ, μ¦ μ€μλ‘ ν΄μνμ¬ λ°ννλ€.
// λ¬Έμμ΄μ μ€μλ‘ ν΄μνμ¬ λ°ννλ€.
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
β parseInt
μ λ¬λ°μ λ¬Έμμ΄ μΈμλ₯Ό μ μλ‘ ν΄μνμ¬ λ°ννλ€. λ λ²μ§Έ μΈμλ‘ μ§λ²μ λνλ΄λ κΈ°μ(2~36)μ μ λ¬ν μ μλ€.
// λ¬Έμμ΄μ μ μλ‘ ν΄μνμ¬ λ°ννλ€.
parseInt('10'); // 10
parseInt('10.123'); // 10
parseInt(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
κΈ°μλ₯Ό μ§μ νμ¬ 10μ§μ μ«μλ₯Ό λ¬Έμμ΄λ‘ λ³ννμ¬ λ°ννλ €λ©΄
Number.prototype.toString
λ©μλλ₯Ό μ¬μ©νλ€.
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
λ¬Έμμ΄μ΄ 16μ§μ 리ν°λ΄(0xλλ 0Xλ‘ μμ)μ΄λ©΄ 16μ§μλ‘ ν΄μνμ¬ 10μ§μ μ μλ‘ λ°ννλ€.
// 16μ§μ 리ν°λ΄ '0xf'λ₯Ό 16μ§μλ‘ ν΄μνκ³ 10μ§μ μ μλ‘ κ·Έ κ²°κ³Όλ₯Ό λ°ννλ€.
parseInt('0xf'); // -> 15
// μ μ½λμ κ°λ€.
parseInt('f', 16); // -> 15
2μ§μ 리ν°λ΄κ³Ό 8μ§μ 리ν°λ΄μ μ λλ‘ ν΄μνμ§ λͺ»νλ€. "0"μΌλ‘ μμνλ μ«μ 10μ§μλ‘ ν΄μ
// 2μ§μ 리ν°λ΄(0bλ‘ μμ)μ μ λλ‘ ν΄μνμ§ λͺ»νλ€. 0 μ΄νκ° λ¬΄μλλ€.
parseInt('0b10'); // 0
// 8μ§μ 리ν°λ΄(ES6μμ λμ
. 0oλ‘ μμ)μ μ λλ‘ ν΄μνμ§ λͺ»νλ. 0 μ΄νκ° λ¬΄μλλ€.
parseInt('0o19'); // 0
λ λ²μ§Έ μΈμλ‘ λͺ ννκ² μλ €μ€μΌ νλ€.
// λ¬Έμμ΄ '10'μ 2μ§μλ‘ ν΄μνλ€.
parseInt('10', 2); // 2
// λ¬Έμμ΄ '10'μ 8μ§μλ‘ ν΄μνλ€.
parseInt('10', 8); // 8
κ·Έ λ°μ μ°Έκ³
// 'A'λ 10μ§μλ‘ ν΄μν μ μλ€.
parseInt('A0'); // NaN
// '2'λ 2μ§μλ‘ ν΄μν μ μλ€.
parseInt('20', 2); // NaN
// 10μ§μλ‘ ν΄μν μ μλ 'A' μ΄νμ λ¬Έμλ λͺ¨λ 무μλλ€.
// 'A'λ 10μ§μλ‘ ν΄μν μ μλ€.
parseInt('A0'); // -> NaN
// '2'λ 2μ§μλ‘ ν΄μν μ μλ€.
parseInt('20', 2); // -> 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
β encodeURI / decodeURI
encodeURI
ν¨μλ μμ νURI(Uniform Resource Identifier)
λ₯Ό λ¬Έμμ¬λ‘ μ λ¬λ°μ μ΄μ€μΌμ΄ν μ²λ¦¬λ₯Ό μν΄ μΈμ½λ©νλ€.
URI
λ μΈν°λ·μ μλ μμμ λνλ΄λ μ μΌν μ£Όμλ₯Ό λ§νκ³URI
μ νμ
μ΄μ€μΌμ΄ν μ²λ¦¬λ?
μ΄μ€μΌμ΄ν μ²λ¦¬
λ λ€νΈμν¬λ₯Ό ν΅ν΄ μ 보λ₯Ό 곡μ ν λ μ΄λ€ μμ€ν μμλ μ½μ μ μλ μμ€ν€ λ¬Έμ μ μΌλ‘ λ³ννλ κ²μ΄λ€. μλ₯Όλ€λ©΄ νκΈβκ°βλ %EC%9E%90 μΌλ‘ μΈμ½λ©λλ€.
// μμ ν 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&teacher
decodeURI
ν¨μλ μΈμ½λ©λ 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&teacher
// decodeURI ν¨μλ μΈμ½λ©λ μμ ν URIλ₯Ό μ λ¬λ°μ μ΄μ€μΌμ΄ν μ²λ¦¬ μ΄μ μΌλ‘ λμ½λ©νλ€.
const dec = decodeURI(enc);
console.log(dec);
// http://example.com?name=μ΄μ
λͺ¨&job=programmer&teacher
β encodeURIComponent / decodeURIComponent
encodeURIComponent
ν¨μλ URI κ΅¬μ± μμλ₯Ό μΈμλ‘ μ λ¬λ°μ μΈμ½λ©νλ€.
encodeURICompoenet
ν¨μλ μΈμλ‘ μ λ¬λ λ¬Έμμ΄μURI
μ ꡬμ±μμμΈ μΏΌλ¦¬ μ€νΈλ§μ μΌλΆλ‘ κ°μ£Ό. λ°λΌμ 쿼리 μ€νΈλ§ ꡬλΆμλ‘ μ¬μ©λ=
?
&
κΉμ§ μΈμ½λ©λλ€.
λ°λ©΄encodeURI
ν¨μλ 맀κ°λ³μλ‘ μ λ¬λ λ¬Έμμ΄μ μμ νURI
μ 체λΌκ³ κ°μ£Όνλ€. λ°λΌμ 쿼리 μ€νΈλ§ ꡬλΆμλ‘ μ¬μ©λ=
?
&
μ μΈμ½λ© νμ§ μλλ€.
decodeURIComponent
ν¨μλ URI κ΅¬μ± μμλ₯Ό λμ½λ©νλ€.
// 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&teacher
μ μΈνμ§ μμ μλ³μμ κ°μ ν λΉνλ©΄ μ μ κ°μ²΄μ νλ‘νΌν°κ° λλ€. μ΄λ₯Ό
μ묡μ μ μ
μ΄λΌ νλ€.
var x = 10; // μ μ λ³μ
function foo () {
// μ μΈνμ§ μμ μλ³μμ κ°μ ν λΉ
y = 20; // window.y = 20;
}
foo();
// μ μΈνμ§ μμ μλ³μλ₯Ό yλ₯Ό μ μμμ μ°Έμ‘°ν μ μλ.
console.log(x + y); // 30
foo
ν¨μ λ΄λΆμy = 20;
μ΄ μ€νλλ©΄ μ°Έμ‘° μλ¬κ° λ°μνμ§ μκ³ , μ μ λ³μμ²λΌ μ¬μ©λλ€.
μ μ κ°μ²΄μ νλ‘νΌν°λ‘ λ±λ‘λμ΄ μ°Έμ‘°λκΈ° λλ¬Έμ΄λ€.
νμ§λ§ yλ λ³μ μ μΈ μμ΄ λ¨μ§ μ μ κ°μ²΄μ νλ‘νΌν°λ‘ μΆκ°λμμ λΏμ΄λ€.
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
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(winodw.y); // undefined