[ECMAScript] ES5, ES6 ๋ฌธ๋ฒ• ์ •๋ฆฌ

ECMAScript ๊ณต๋ถ€

ES5 ์ด์ „

  • ES3 (1999) : ์ •๊ทœํ‘œํ˜„์‹, try/catch๋ฌธ

string

  • string.length : ๊ธธ์ด ์†์„ฑ
  • string.indexOf(string, [start]) : ํ•ด๋‹น ๊ธ€์ž์˜ ์‹œ์ž‘ index ์œ„์น˜ ๋ฐ˜ํ™˜
  • string.lastIndexOf(string, [start]) : ํ•ด๋‹น ๊ธ€์ž์˜ ๋งˆ์ง€๋ง‰ ์‹œ์ž‘ index ์œ„์น˜ ๋ฐ˜ํ™˜
  • string.search(string) : indexOf์™€ ๋น„์Šทํ•˜์ง€๋งŒ ์ •๊ทœํ‘œํ˜„์‹ ์‚ฌ์šฉ x
  • string.slice(index, index2) : index๋ถ€ํ„ฐ index2-1๊นŒ์ง€ ์ž๋ฅด๊ธฐ
    • ์Œ์ˆ˜ index๋Š” ๋’ค์—์„œ๋ถ€ํ„ฐ ์…ˆ
  • string.substring(index, index2) : slice์™€ ๋น„์Šทํ•˜์ง€๋งŒ, ์Œ์ˆ˜ ๋ถˆ๊ฐ€
  • string.substr(index, length) : index๋ถ€ํ„ฐ length๋งŒํผ ์ž๋ฅด๊ธฐ
  • string.replace(string, string2) : string์„ string2๋กœ ๋ณ€ํ™˜
  • string.toUpperCase() : ๋Œ€๋ฌธ์ž ๋งŒ๋“ค๊ธฐ
  • string.toLowerCase() : ์†Œ๋ฌธ์ž ๋งŒ๋“ค๊ธฐ
  • string.concat(string, string2) : string๊ณผ string2 ์ด์–ด๋ถ™์—ฌ์„œ return
  • string.split(๊ตฌ๋ถ„์ž) : ๊ตฌ๋ถ„์ž๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ array๋กœ ๋ณ€ํ™˜

์ •๊ทœ ํ‘œํ˜„์‹

  • ๋ฌธ๋ฒ•

/pattern/modifier

pattern : ์ฐพ์•„์•ผํ•˜๋Š” ๊ฒƒ

modifier : case์— ๋งž์ถฐ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ

  • pattern
    • [abc] : ๋Œ€๊ด„ํ˜ธ ๋‚ด์˜ ์•„๋ฌด char์—๋‚˜ ๋งž์œผ๋ฉด ๋จ
    • [0-9] : ํ•ด๋‹น ๋ฒ”์œ„ ๋‚ด
    • (x|y) : ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜
    • \d : digit ์ฐพ๊ธฐ
    • \s : ๊ณต๋ฐฑ ์ฐพ๊ธฐ
    • \b : ๋‹จ์–ด ์‹œ์ž‘์ด๋‚˜ ๋
    • \uxxxx : hex ์ˆซ์ž
    • n+ : ์ ์–ด๋„ ํ•˜๋‚˜์˜ n
    • n* : 0์ด์ƒ
    • n? : 0 ๋˜๋Š” 1๊ฐœ
  • modifier ์ข…๋ฅ˜
    • i : ๊ธฐ๋ณธ
    • g : ๋ชจ๋“  matching ์ฐพ๊ธฐ
    • m : multiline matching ์ฐพ๊ธฐ
  • ํ•จ์ˆ˜
    • pattern.test(string) ์œผ๋กœ ํ…Œ์ŠคํŠธํ•ด๋ณผ ์ˆ˜ ์žˆ์Œ
      • ์ฐพ์œผ๋ฉด true
      • ์•„๋‹ˆ๋ฉด false
    • pattern.exec(string) ์œผ๋กœ ํ…Œ์ŠคํŠธํ•ด๋ณผ ์ˆ˜ ์žˆ์Œ
      • ์ฐพ์œผ๋ฉด object
      • ์•„๋‹ˆ๋ฉด null object

ES5

๋ฌธ๋ฒ• ๋ณ€๊ฒฝ ์‚ฌํ•ญ

  • []๋กœ string value์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • array๋‚˜ {} ์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ์— ์ฝค๋งˆ
    • {} : object literals
    • ๋งˆ์ง€๋ง‰ ์š”์†Œ์— ์ฝค๋งˆ : Trailing comma
    • ์ฃผ์˜ : JSON์—๋Š” ํ—ˆ์šฉ x, IE8์€ crash๋‚จ
  • string ์ƒ์ˆ˜์— multiline ๊ฐ€๋Šฅ
  • ์†์„ฑ ์ด๋ฆ„์œผ๋กœ ์˜ˆ์•ฝ์–ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ

์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ

use strict

use strict ๊ตฌ๋ฌธ์ด global ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ๋˜์–ด ํ•ด๋‹น ๋ฒ”์œ„์— ์žˆ๋Š” js๊ฐ€ strict mode์—์„œ ์‹คํ–‰๋œ๋‹ค.

strict mode๋ž€?

  • ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ž˜๋ชป ๊ธฐ์žฌํ•˜๋ฉด, ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ error๋ฅผ throwํ•จ

  • ๊ธฐ์žฌ๋˜์–ด์žˆ์ง€ / ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ถˆ๊ฐ€

  • ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ์‚ญ์ œ ๋ถˆ๊ฐ€

  • ๋˜‘๊ฐ™์€ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ถˆ๊ฐ€

  • ์ˆซ์ž ์•ž์— 0๋ถˆ๊ฐ€

  • readonly ๋ณ€์ˆ˜๋Š” ์“ฐ๊ธฐ ์—ฐ์‚ฐ ๋ถˆ๊ฐ€

    var obj = {};
    Object.defineProperty(obj, "x", {value:0, writable:false});
    obj.x = 3.14; // ๋ถˆ๊ฐ€
  • get์œผ๋กœ๋งŒ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋Š” ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์—†์Œ

    var obj = {get x() {return 0} };
    
    obj.x = 3.14; // ๋ถˆ๊ฐ€
  • ๋ณ€์ˆ˜ ์ด๋ฆ„์œผ๋กœ ๋ถˆ๊ฐ€ํ•œ ๊ฒƒ๋“ค

    • implements
    • interface
    • let
    • package
    • private
    • protected
    • public
    • static
    • yield
  • this๋Š” ํ•ด๋‹น function์„ ํ˜ธ์ถœํ•œ object๋ฅผ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น object๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์œผ๋ฉด this๊ฐ€ undefined๊ฐ€ ๋จ

String.trim()

let str = "        hello heejin   ";
alert(str.trim());

์–‘์ชฝ์˜ ๋นˆ์นธ์„ ์—†์• ์คŒ

IE8์—์„œ๋Š” ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ๋Œ€์ฒดํ•ด์•ผํ•จ

Array.isArray(object)

object๊ฐ€ array์ธ์ง€ ์ฒดํฌ

Array.forEach(func)

forEach์— ๋„˜๊ฒจ์ง„ ๋งค๊ฐœ๋ณ€์ˆ˜ function์ด Array์˜ ๊ฐ ์š”์†Œ๋งˆ๋‹ค ์‹คํ–‰๋จ

function์—๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ value๊ฐ€ ์žˆ์Œ

Array.map(func)

map์— ๋„˜๊ฒจ์ง„ ๋งค๊ฐœ๋ณ€์ˆ˜ function์ด Array์˜ ๊ฐ ์š”์†Œ๋งˆ๋‹ค ์‹คํ–‰๋˜๊ณ , ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด Array๋กœ returnํ•จ

function์—๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ value, index, array๊ฐ€ ์žˆ์Œ

 

Array.filter(func)

filter์— ๋„˜๊ฒจ์ง„ ๋งค๊ฐœ๋ณ€์ˆ˜ test function์„ ํ†ต๊ณผํ•œ ์š”์†Œ๋งŒ ๋‹ค์‹œ ์ €์žฅํ•˜์—ฌ, ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด Array๋กœ return ํ•จ

function์—๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ value, index, array๊ฐ€ ์žˆ์Œ

Array.reduce(func)

ํ•œ ๊ฐ€์ง€ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Array์˜ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ.

reduce์— ๋„˜๊ฒจ์ง„ ๋งค๊ฐœ๋ณ€์ˆ˜ function์„ ํ†ตํ•ด ์ƒˆ๋กœ ์ •์˜ํ•œ ๋ณ€์ˆ˜๋ฅผ ๋„˜๊ฒจ๋ฐ›๊ณ  ๊ฒฐ๊ณผ๋กœ return ํ•จ

var numbers1 = [45, 4, 9, 16, 25];
var sum = numbers1.reduce(myFunction);

function myFunction(total, value, index, array) {
  return total + value;
}

function์—๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ total, value, index, array๊ฐ€ ์žˆ์Œ

total์€ ์ดˆ๊ธฐ ๋ณ€์ˆ˜์ด์ž ์ด์ „ ์š”์†Œ์˜ function์—์„œ return๋œ ๊ฐ’์ž„

Array.reduceRight(func)

์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ๋™์ž‘

Array.every(func)

๋ชจ๋“  ์š”์†Œ๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ์ง„ test function์„ ๋งŒ์กฑํ•˜๋Š”์ง€ boolean์œผ๋กœ return

Array.some(func)

๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ์ง„ test function์„ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ boolean์œผ๋กœ return

Array.indexOf(item, [start])

์ฐพ๊ณ ์žํ•˜๋Š” ์š”์†Œ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ธฐ๋ฉด ํ•ด๋‹น ์š”์†Œ๋ฅผ start๋ถ€ํ„ฐ ์ฐพ์•„์„œ ์ฒซ index๋ฅผ return

Array.lastIndexOf(item, [start])

์ฐพ๊ณ ์žํ•˜๋Š” ์š”์†Œ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ธฐ๋ฉด ํ•ด๋‹น ์š”์†Œ๋ฅผ start๋ถ€ํ„ฐ ์ฐพ์•„์„œ ๋งˆ์ง€๋ง‰ index๋ฅผ return

JSON.parse(string)

string์„ json object๋กœ ๋ณ€ํ™˜

JSON.stringify(object)

object๋ฅผ string์œผ๋กœ

Date.now()

milliseconds ๋‹จ์œ„์˜ date return

Property Getters and Setters

// Create an object:
var person = {
  firstName: "John",
  lastName : "Doe",
  get fullName() {
    return this.firstName + " " + this.lastName;
  }
};

// Display data from the object using a getter:
document.getElementById("demo").innerHTML = person.fullName;

New Object Property Methods

Object.defineProperty(๋ณ€์ˆ˜, ์†์„ฑ, ๋ฐ”๊ฟ€ ์†์„ฑ)๋กœ object์˜ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ๊ธฐ ์“ฐ๊ธฐ ๋ณ€๊ฒฝ ๊ถŒํ•œ๋„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Œ

// Change a Property:
Object.defineProperty(person, "language", {
  value: "EN",
  writable : true,
  enumerable : true,
  configurable : true
});

์ถ”๊ฐ€๋œ ๋ฉ”์†Œ๋“œ๋“ค

// Adding or changing an object property
Object.defineProperty(object, property, descriptor)

// Adding or changing many object properties
Object.defineProperties(object, descriptors)

// Accessing Properties
Object.getOwnPropertyDescriptor(object, property)

// Returns all properties as an array
Object.getOwnPropertyNames(object)

// Returns enumerable properties as an array
Object.keys(object)

// Accessing the prototype
Object.getPrototypeOf(object)

// Prevents adding properties to an object
Object.preventExtensions(object)
// Returns true if properties can be added to an object
Object.isExtensible(object)

// Prevents changes of object properties (not values)
Object.seal(object)
// Returns true if object is sealed
Object.isSealed(object)

// Prevents any changes to an object
Object.freeze(object)
// Returns true if object is frozen
Object.isFrozen(object)

string ์†์„ฑ ์ ‘๊ทผ

  • string.charAt(index) : index์— ์žˆ๋Š” character ๋ฐ˜ํ™˜
    • charAt ์—ฐ์‚ฐ์ž๋Š” ์—†์œผ๋ฉด empty string return
  • string.charCodeAt(index) : ํ•ด๋‹น index์˜ ๊ธ€์ž์˜ UTF-16 code ๋ฐ˜ํ™˜
  • string[] ์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • IE7 ์ „์—๋Š” ๋™์ž‘ x
    • [] ์—ฐ์‚ฐ์ž๋Š” ์—†์œผ๋ฉด undefined return
    • readonly => ํ•ด๋‹น ์—ฐ์‚ฐ์ž๋กœ ๊ฐ’ ํ• ๋‹น x

ES6

let, const

let, const๋Š” block ๋ฒ”์œ„ ๋‚ด์—์„œ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ

์žฌ์ •์˜ ๋ถˆ๊ฐ€

let์€ ๊ฐ’ ์žฌํ• ๋‹น ๊ฐ€๋Šฅ, const๋Š” ๋ถˆ๊ฐ€

arrow function

const a = (x, y) => x*y;

arrow function์€ this ๊ฐ€ ๊ธฐ๋ณธ function๊ณผ ๋‹ค๋ฆ„

๊ธฐ๋ณธ function์€ ํ•ด๋‹น function์„ callํ•œ object

arrow function์€ ํ•ด๋‹น function์˜ owner

๋ณธ๋ž˜ js๋Š” hoisting(๋Œ์–ด์˜ฌ๋ ค ์‚ฌ์šฉํ•˜๊ธฐ)์ด ๊ฐ€๋Šฅํ•œ๋ฐ, arrow function์€ ๋ถˆ๊ฐ€

return ํ‚ค์›Œ๋“œ์™€ {}๋ฅผ ์ƒ๋žต ๊ฐ€๋Šฅ

Loop Array, String

for (x of cars) {
    ...
}
for (x of txt) {
    ...
}
  • for in : object์— ์ ์šฉ๋˜์–ด index๋ฅผ ๋ฐ›์•„์˜ด
  • for of : iterable object์— ์ ์šฉ๋˜์–ด ์š”์†Œ๋ฅผ ๋ฐ›์•„์˜ด
    • string, array, map, nodelist ๋“ฑ๋“ฑ ๊ฐ€๋Šฅ

JS classes

class ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ class๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋จ

constructor function์„ ํ•ญ์ƒ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•จ

object๊ฐ€ ์•„๋‹ˆ๋ผ object์˜ template์œผ๋กœ ์ž‘์šฉ

์‚ฌ์šฉ ๋ฐฉ์‹์€ ์—ฌ๋Š ์–ธ์–ด๋“ค๊ณผ ๊ฐ™์Œ

JS Promises

let myPromise = new Promise(function(myResolve, myReject) {

  myResolve(); // when successful
  myReject();  // when error
});

myPromise.then(
  function(value) { /* code if successful */ },
  function(error) { /* code if some error */ }
);

Symbol type

object์˜ ์ˆจ์€ identifier๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ

const person = {
  firstName: "John",
  lastName: "Doe",
  age: 50,
  eyeColor: "blue"
};

let id = Symbol('id');
person.id = 140353;

ํ•ญ์ƒ uniqueํ•œ ๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ•จ

default parameter values

๋งค๊ฐœ๋ณ€์ˆ˜ ๋„˜๊ธธ ๋•Œ default ๊ฐ’ ์ง€์ • ๊ฐ€๋Šฅ

rest parameter

function sum(...args){
}

ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์ •ํ•ด์ง€์ง€ ์•Š์Œ

Array.find(func)

๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ์ง„ function์„ ํ†ต๊ณผํ•œ ์ฒซ๋ฒˆ์งธ ์š”์†Œ ๋ฐ˜ํ™˜

function์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” value, index, array

Array.findIndex(func)

์œ„์™€ ๊ฐ™๊ณ , index๋ฅผ ๋ฐ˜ํ™˜

New Number Properties

  • EPSILON
  • MIN_SAFE_INTEGER
  • MAX_SAFE_INTEGER

New Number Method

  • Number.isInteger(number) : ์ •์ˆ˜์ธ์ง€ ํ™•์ธ
  • Number.isSafeInteger(number) : ์•ˆ์ „ํ•œ ๋ฒ”์œ„ ๋‚ด์˜ ์ •์ˆ˜์ธ์ง€ ํ™•์ธ

New Global Methods

  • isFinite() : Infinity ๋˜๋Š” NaN์ด ์•„๋‹Œ์ง€ ํ™•์ธ
  • isNaN() : NaN์ด ์•„๋‹Œ์ง€ ํ™•์ธ

ES7

string.padStart(size, paddingChar)

paddingChar๋ฅผ size-1๋งŒํผ ์•ž์— padding

string.padEnd(size, paddingChar)

paddingChar๋ฅผ size-1๋งŒํผ ๋’ค์— padding

 

 

 


์ฐธ๊ณ  : www.w3schools.com/js/js_versions.asp

๋ฐ˜์‘ํ˜•