-
νμ€ λΉνΈμΈ κ°μ²΄ : ECMAScriptμ μ μλ κ°μ²΄
-
νΈμ€νΈ κ°μ²΄ : ECMAScriptμλ μ μλμ΄ μμ§ μμ§λ§, Javascript μ€ννκ²½μμ μΆκ°λ‘ μ 곡νλ κ°μ²΄
-
μ¬μ©μ μ μ κ°μ²΄ : μ¬μ©μκ° μ§μ μ μν κ°μ²΄
Javascriptλ Object, Function, Symbol λ± 40μ¬κ°μ νμ€ λΉνΈμΈ κ°μ²΄λ₯Ό μ 곡νλ€. λλΆλΆ μμ±μ ν¨μ κ°μ²΄λ€.
μμ±μ ν¨μ κ°μ²΄μΈ νμ€ λΉνΈμΈ κ°μ²΄λ νλ‘ν νμ λ©μλμ μ μ λ©μλλ₯Ό μ 곡νλ€.
μμ±μ ν¨μ κ°μ²΄κ° μλ νμ€ λΉνΈμΈ κ°μ²΄λ μ μ λ©μλλ§ μ 곡νλ€.
// String μμ±μ ν¨μμ μν String κ°μ²΄ μμ±
const strObj = new String("Lee"); // String {"Lee"}
// String μμ±μ ν¨μλ₯Ό ν΅ν΄ μμ±ν strObj κ°μ²΄μ νλ‘ν νμ
μ String.prototypeμ΄λ€.
console.log(Object.getPrototypeOf(strObj) === String.prototype); // true
// 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)); // falseString, Number, Boolean, Symbol κ°μ λν΄ κ°μ²΄μ²λΌ μ κ·Όνλ©΄ μμ±λλ μμ κ°μ²΄(JS μμ§μ΄ μ묡μ μΌλ‘ μμ±)λ₯Ό λνΌ κ°μ²΄(wrapper object)λΌκ³ νλ€.
const str = "hi";
// μμ νμ
μΈ λ¬Έμμ΄μ΄ λνΌ κ°μ²΄μΈ String μΈμ€ν΄μ€λ‘ λ³νλλ€.
console.log(str.length); // 2
console.log(str.toUpperCase()); // HI
// λνΌ κ°μ²΄λ‘ νλ‘νΌν°μ μ κ·Όνκ±°λ λ©μλλ₯Ό νΈμΆν ν, λ€μ μμκ°μΌλ‘ λλλ¦°λ€.
console.log(typeof str); // stringμμΈν κ³Όμ
// β μλ³μ 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);μ μ κ°μ²΄λ μ½λκ° μ€νλκΈ° μ΄μ λ¨κ³μ Javascript μμ§μ μν΄ μ΄λ€ κ°μ²΄λ³΄λ€λ λ¨Όμ μμ±λλ νΉμν κ°μ²΄μ΄λ©°, μ΄λ€ κ°μ²΄μλ μνμ§ μλ μ΅μμ κ°μ²΄λ€. λΈλΌμ°μ νκ²½μμλ window, node.jsνκ²½μμλ globalμ΄λ€.
μ μ κ°μ²΄μ νΉμ§
- μλμ μΌλ‘ μμ±ν μ μλ€.
- μ μ κ°μ²΄μ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν λ window(λλ global)λ₯Ό μλ΅ν μ μλ€.
- λͺ¨λ νμ€ λΉνΈμΈ κ°μ²΄λ₯Ό νλ‘νΌν°λ‘ κ°μ§κ³ μλ€.
- μ€ννκ²½μ λ°λΌ μΆκ°μ μΌλ‘ νλ‘νΌν°μ λ©μλλ₯Ό κ°λλ€.
- varν€μλλ‘ μ μΈν λ³μ, μ묡μ μ μ, μ μν¨μλ μ μκ°μ²΄μ νλ‘νΌν°κ° λλ€.
- μ¬λ¬ κ°μ script νκ·Έλ₯Ό ν΅ν΄ javascript μ½λλ₯Ό λΆλ¦¬ν΄λ νλμ μ μ κ°μ²΄λ₯Ό 곡μ νλ€.
Infinity, NaN, undefined
// μ μ νλ‘νΌν°λ windowλ₯Ό μλ΅νκ³ μ°Έμ‘°ν μ μλ€.
console.log(window.Infinity === Infinity); // true
console.log(window.NaN); // NaN
console.log(window.undefined); // undefinedλΉνΈμΈ μ μ ν¨μλ μ ν리μΌμ΄μ μ μμμ νΈμΆν μ μλ λΉνΈμΈ ν¨μλ‘μ μ μ κ°μ²΄μ λ©μλλ€.
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()); // 1eval ν¨μλ₯Ό ν΅ν΄ μ¬μ©μλ‘λΆν° μ λ ₯λ°μ μ½ν μΈ λ₯Ό μ€ννλ κ²μ 보μμ λ§€μ° μ·¨μ½νλ€. κ·Έλ¦¬κ³ μΌλ°μ μΈ μ½λμ€νμ λΉν΄ μ²λ¦¬μλκ° λ리λ€.Β λ°λΌμ eval ν¨μμ μ¬μ©μ κΈμ§ν΄μΌ νλ€.
isFinite
// μΈμκ° μ νμμ΄λ©΄ 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"); // -> falseisNaN
// μ«μ
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 => NaNparseFloat
// λ¬Έμμ΄μ μ€μλ‘ ν΄μνμ¬ λ°ννλ€.
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 "); // -> 60parseInt
// λ¬Έμμ΄μ μ μλ‘ ν΄μνμ¬ λ°ννλ€.
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
// 16μ§μ 리ν°λ΄ '0xf'λ₯Ό 16μ§μλ‘ ν΄μνκ³ 10μ§μ μ μλ‘ κ·Έ κ²°κ³Όλ₯Ό λ°ννλ€.
parseInt("0xf"); // -> 15
// μ μ½λμ κ°λ€.
parseInt("f", 16); // -> 15
// 2μ§μ 리ν°λ΄(0bλ‘ μμ)μ μ λλ‘ ν΄μνμ§ λͺ»νλ€. 0 μ΄νκ° λ¬΄μλλ€.
parseInt("0b10"); // -> 0
// 8μ§μ 리ν°λ΄(ES6μμ λμ
. 0oλ‘ μμ)μ μ λλ‘ ν΄μνμ§ λͺ»νλ€. 0 μ΄νκ° λ¬΄μλλ€.
parseInt("0o10"); // -> 0
// '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 "); // -> 60encodeURI ν¨μλ μμ ν URIλ₯Ό λ¬Έμμ΄λ‘ μ λ¬λ°μ μ΄μ€μΌμ΄ν μ²λ¦¬λ₯Ό μν΄ μΈμ½λ© νλ€.
- μ΄μ€μΌμ΄ν μ²λ¦¬ - λ€νΈμν¬λ₯Ό ν΅ν΄ μ 보λ₯Ό 곡μ ν λ μ΄λ€ μμ€ν μμλ μ½μ μ μλ μμ€ν€ λ¬Έμ μ μΌλ‘ λ³ννλ κ²
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&teacherencodeURIComponent ν¨μλ URI κ΅¬μ± μμλ₯Ό μΈμλ‘ μ λ¬λ°μ μΈμ½λ© νλ€.
encodeURIComponent ν¨μλ μΈμλ‘ μ λ¬λ λ¬Έμμ΄μ 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); // 30JSμμ§μ΄ y=20μ window.y = 20μΌλ‘ ν΄μνκ³ λμ μμ±νλ€. μ΄λ¬ν νμμ μ묡μ μ μ μ΄λΌκ³ νλ€. μ΄ λ yλ λ³μκ° μλλ―λ‘ νΈμ΄μ€ν μ΄ λ°μνμ§ μλλ€. λν delete μ°μ°μλ‘ μμ ν μ μλ€. ( λ³μλ delete μ°μ°μλ‘ μμ κ° λΆκ°λ₯νλ€.)