5.5 Array methods여러 메소드들을 좀 더 알아보자.Add/remove itemssplice배열 내부의 요소가 삭제되어도, 배열의 길이가 줄지는 않는다. delete는 값을 삭제하는 것이기 때문이다. let arr = ["I", "go", "home"];delete arr[1]; // remove "go"alert( arr[1] ); // undefined// now arr = ["I", , "home"];alert( arr.length ); // 3보통 요소를 삭제하면 우리는 해당 배열의 길이도 자연스럽게 줄어드는 것을 기대하는데, 이를 위해 splice를 사용할 수 있다. let arr = ["I", "study", "JavaScript"];arr.splice(1, 1); // from ..
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"} 객체는 가비지 컬렉션 대상이 ..