5.4 ArraysGet last elements with "at"let fruits = ["Apple", "Orange", "Plum"];// same as fruits[fruits.length-1]alert( fruits.at(-1) ); // PlumMethods pop/push, shift/unshiftpop/push는 자바에서도 같은 이름의 함수가 존재해서 잘 알고 있다.shiftlet fruits = ["Apple", "Orange", "Pear"];alert( fruits.shift() ); // remove Apple and alert italert( fruits ); // Orange, Pearunshiftlet fruits = ["Orange", "Pear"];fruits.unshift..
5.3 StringsQuetesjavascript에서 싱글, 더블, 백틱 상관없이 뭐든지 문자열을 표현하는데, 사용가능하다. 다만 백틱을 사용할 경우 줄바꿈이나 표현식을 삽입하는 것이 가능하다. function sum(a, b) { return a + b;}alert(`1 + 2 = ${sum(1, 2)}.`); // 1 + 2 = 3.// -------------------let guestList = `Guests: * John * Pete * Mary`;alert(guestList); // a list of guests, multiple linesString lengthalert( `My\n`.length ); // 3Accessing characterslet str = `Hello`;// the ..
5.1 Methods of primitives기본타입의 함수나 기능들이 동작하려면 해당 타입을 감싸는 'object wrapper"가 생성되어 기능을 수행한다.let str = "Hello";alert( str.toUpperCase() ); // HELLO문자열이 속성에 접근하는 순간 string을 다룰 수 있는 메서드를 가진 이른바 새로운 객체 생성해당 함수가 동작하고 새로운 문자열을 반환생성된 객체는 소멸되고 str만 남음즉, 기본타입이라도 메서드를 사용할 수 있으면서도 여전히 가벼운 기본 타입을 유지할 수 있는 것이다. java에서 제공하는 wrapper class와 비슷한 개념 같지만, 아마도 자바에서는 기본타입 사용 시에 자동으로 wrapper class 인스턴스가 생성되는 것은 아니니 혼동하지..
4.8 Object to primitive conversionConversion rules불리언으로 변환되지는 않는다.숫자 변환은 객체를 빼거나 수학적인 함수가 적용될 때 발생된다.문자열로의 변환 일반적으로 어떤 결과를 반환하는 동작에서 발생한다. (alert 같은 것)hints객체가 원시타입으로 변환될 때에 '힌트'라는 메커니즘이 존재하는데, 말 그대로 이 힌트가 변환하려는 객체가 어떤 타입으로 변환할지 힌트를 준다. "string" - 문자열로 변환되는 경우 (alert와 같이 반환값에 문자열이 기대되는 동작)// outputalert(obj);// using object as a property keyanotherObj[obj] = 123; "number" - 숫자로 변환되는 경우 (수학적인 연산 ..
4.6 Optional chaining '?.'종종 어떤 값을 가져오려 할 때, 해당 값이 존재하지 않는 경우가 있다. let user = {}; // a user without "address" propertyalert(user.address.street); // Error!이 경우 에러를 뱉는 것보다, undefined와 같은 값이 반환되는 것이 좋을 것 같다.let user = {};alert(user.address ? user.address.street : undefined);// ---------------------------------let user = {}; // user has no addressalert(user.address ? user.address.street ? user.addr..
4.4 Object methods, "this"객체의 함수를 선언하는 방법은 아래와 같다.// these objects do the sameuser = { sayHi: function() { alert("Hello"); }};// method shorthand looks better, right?user = { sayHi() { // same as "sayHi: function(){...}" alert("Hello"); }};"this" is not boundthis는 서로 다른 객체에 할당되어 따로 동작할 수 있다.let user = { name: "John" };let admin = { name: "Admin" };function sayHi() { alert( this.name )..
4.3 Garbage collectionReachabilityjavascript 메모리 관리의 주된 개념은 접근성이다. 아래는 접근성을 기준으로 메모리에서 삭제될 수 없는 기본적인 대상들이 있다.현재 실행 중인 함수나 그 함수의 변수 및 파라미터현재 중첩된 호출의 다른 함수나 그 함수의 변수 및 파라미터전역 변수등등 다른 내부적인 것들위 대상들을 루트라고 부른다. 만약 전역 변수에서 어떤 객체를 할당받고, 이후 참조가 변경된다면, (null로 변경하는 등) 메모리는 해당 객체를 정리한다.// user has a reference to the objectlet user = { name: "John"};user = null; // 참조가 끊어지면서, {name: "John"} 객체는 가비지 컬렉션 대상이 ..
4.2 Object references and copying객체와 기본 타입 간에는 값을 저장하는 방식에서 차이가 있다. 객체는 주솟값, 기본 타입은 값 그 자체를 새롭게 생성하여 저장한다. 예를 들어 아래 코드는 변수마다 각각 문자열 값을 따로 저장한다.let message = "Hello!";let phrase = message;객체는 다르다. 메모리 어딘가 값이 저장된 주솟값을 변수에 할당한다. 아래 코드에서 각각의 변수는 같은 주솟값을 저장한다.let user = { name: "John" };let admin = user; // copy the referenceComparison by reference객체를 먼저 생성한 뒤 할당할 경우, 완전히 새로운 객체를 만든 것과 같다.let a = {};..