9. Object Literal

2019년에 Hexo 블로그에 쓴 글을 옮겨 왔습니다. 당시 이해를 그대로 두었습니다.

What is Object?

JavaScript is an object-based programming language and almost “everything” that makes up JavaScript is an object. The rest of the values (functions, arrays, regular expressions, etc.) are all objects except primitive types.

Object / reference type is a complex data structure that consists of several types of values (primitive type values or other objects) in a single unit.

Primitive value Object
immutable value mutable value
pass by value pass by reference

Object is a set of properties that consist of keys and values.

Any value that is available in JavaScript can be used as the value of the property. Functions in JavaScript are first-class objects, so they can be treated as values.

JavaScript functions are first-class objects, so they can be used as property values. If the property value is a function, it is called a method to distinguish it from a normal function.

  • Attributes are refer to additional information of an object.
  • Properties are describing the characteristics of an object.

An object is a set of methods, which means properties that refer to data and behavior that can refer to and manipulate data.

Create Object by Object Literal

Class-based object-oriented languages such as C ++ and Java pre-define classes and create objects by calling the constructor with the new operator at the point in time. However, JavaScript is a prototype-based object-oriented language that creates objects differently.

Then how JavaScript creates object?

  • Object literal
  • Object constructor function
  • Constructor function
  • Object.create method
  • Class (ES6)

The most basic and general method is using object literal.

// empty object
var empty = {};

// At the time of assignment, the object literal is interpreted and the resulting object is created.
var student = {
    name: 'Park',
    hello: function () {
        Console.log('Hello. I'm ${this.name}.');
	}
};

The {} used to create the object is not a block of code. It is an object literal because it ends with a ;.

You can create a property as soon as you create the object by including the property in an object literal, or you can dynamically add a property after you create the object.

Property

An object is a set of properties. A property consists of a key and a value.

The values that can be used for property key and property values are as follows.

  • Property key : all strings include empty string or symbol value
  • Property value : all values in JavaScript

Quotes can be omitted if the property key is a name that conforms to the identifier naming convention, that is, a valid name that can be used in JavaScript.

var student = {
    name: 'Park'
};

// Dynamically add property key
student['age'] = 25;

console.log(student); 	// {name: "Park", age: 25}

Property keys are allowed to be duplicated, and in the event of duplication, the last declared key is valid.

Method

If the property value is a function, it is called a method to distinguish it from a normal function. In other words, a method means a function restricted to an object.

var circle = {
  radius: 5, // ← property
  getDiameter: function () { // ← method
    return 2 * this.radius; // this pointing circle
  }
};

console.log(circle.getDiameter());  // 10

this is a reference variable that points to the object that called it.

Access of Property

You can access the properties in such a way,

  • Dot notation
  • Bracket notation
var student = {
	name: 'Park'
};

console.log(student.name);		// Access by dot notaion
console.log(student['name'];	// Access by bracket notation

If the property key follows the identifier naming convention, 2 notations are both available. If not, only bracket notation is available.

If the property key is not a name that does conform to the identifier naming convention, that is, not a valid name that can be used in JavaScript, must use square bracket notation. However, the quotation marks '' can be omitted if the property key is a string of numbers.

Update Property Value

If assign a value to an existing property, the property value is updated.

var student = {
    name: 'Park'
};

student.name = 'Kim';

console.log(student);	// {name: "Kim"}

Dynamic property creation

var student = {
    name: 'Park'
};

student.age = '22';

console.log(student); // {name: "Park", age: "22"}

Can add, modify, and delete properties after object creation is complete.

New ES6 Object Literal Functions

Property shorthand

let x = 1, y = 2;

const obj = { x, y };   // { x:1, y: 2 }

Property key dynamic creation

// ES6
const prefix = 'prop';
let i = 0;

// 객체 리터럴 내부에서 프로퍼티 키 동적 생성
var obj = {
    [`${prefix}-${++i}`]: i,
    [`${prefix}-${++i}`]: i,
    [`${prefix}-${++i}`]: i
};

console.log(obj); // {prop-1: 1, prop-2: 2, prop-3: 3}

Method shorthand

// ES6
const obj = {
    name: 'Park',
    // 메소드 축약 표현
    sayHi(other) {
        console.log(`Hi, ${other}! I'm ${this.name}`);
    }
};

obj.sayHi('Sam'); // Hi, Sam! I'm Park