목록❔ Question/JavaScript (8)
Daehyunii's Dev-blog

Array.prototype.push 메서드로 배열의 마지막 위치에 요소를 추가하는 것보다, length 프로퍼티를 이용하여 (arr[arr.length] = 값) 마지막 요소를 추가하는것이 더 빠르다고 한다. 그 이유는 무엇일까??? (모던 자바스크립트 딥 다이브 p510)

빌트인 이터러블 Set 객체 -Set 생성자 함수는 이터러블을 인수로 전달받아 Set 객체를 생성한다. 그런데 Set 객체는 모든 값을 요소로 저장할 수 있다고 한다. 이건 모순되는 이야기가 아닌가??

var 키워드로 선언한 전역 변수 -window 전역객체의 프로퍼티는 빌트인 객체, 자바스크립트 실행 환경에 따라 추가적인 프로퍼티와 메서드, var키워드로 선언한 전역 변수, 암묵적 전역, 전역 함수를 갖는다. 그렇다면 변수는 결국 전역 객체의 프로퍼티인가? -let과const키워드로 선언한 전역 변수는 보이지 않는 개념적인 블록인 전역 렉시컬 환경의 선언적 환경 레코드 내에 존재하게 된다고 했는데 그렇다면 let과 const키워드로 선언한 전역 변수는 전역 렉시컬 환경의 선언적 환경 레코드의 프로퍼티로 존재하는가? -그렇다면 전역 렉시컬 환경의 선언적 환경 레코드는 객체인가??

- var 키워드 : 선언 단계와 초기화 단계가 모두 런타임 이전 자바스크립트 엔진의 평가 단계에 이뤄진다. - let const 키워드 : 선언 단계는 런타임 이전 평가 단계에서 이뤄지고, 초기화 단계는 런타임에 변수 선언문에 도달했을 때 실행된다. 그렇다면 왜 var 키워드와 let, const 키워드의 초기화 단계의 시점 차이가 존재하도록 만든 것일까?? 답 : var 키워드로 선언한 변수는 코드의 흐름에 맞지 않게 호이스팅 되기 때문에 코드의 가독성을 떨어뜨리고 오류를 발생시킬 여지를 남기지만 let, const 키워드로 선언한 변수는 호이스팅은 되지만 '초기화 단계'가 런타임에 변수 선언문에 도달했을 때 실행되기 때문에 코드의 흐름에 맞게 코드를 읽을 수 있기 때문이다. 2022.07.06 - ..

재귀함수 동작원리 설명 function countdown2(m){ if(m === 0) return 1000; console.log(m); return countdown2(m-1); } //풀어서 작성해보기 function countdown(3){ if(3 === 0) return 1000; // false 실행안됨 console.log(3); return countdown(2); if(2 === 0) return 1000; // false 실행안됨 console.log(2); return countdown(1); if(1 === 0) return 1000; // false 실행안됨 console.log(1); return countdown(0); if(0 === 0) return 1000; // tru..

-객체 리터럴의 프로퍼티 객체는 프로퍼티와 메서드로 구성되며, 프로퍼티는 프로퍼티 키와 프로퍼티 값으로 구성된다. 프로퍼티 키는 문자열과, 심볼 값을 사용하며 프로퍼티 값은 모든 데이터 타입의 값으로 사용할 수 있다. 그렇다면, 프로퍼티 키와 프로퍼티 값도 값으로 만드는 것인데 그렇다면 이것은 표현식인가? -답 : 위의 궁금증은 정확한 정의를 통해서 금방 해결 할 수 있다. 표현식인 값이란 값으로 평가 될 수 있는 문이다. 값으로 평가 될 수 있는 문이란, 값처럼 사용할 수 있다는 말이고 가장 쉬운 비교는 함수에 할당해 보는 방법이다. var person = { firstName : 'woo' }; /* 프로퍼티 생성문 - firstName : 'woo' 프로퍼티 접근문 - person.firstName..

-단항 산술 연산자 단항 산술 연산자 +,-는 숫자 값으로 평가되지 않는 표현식에 붙이면 숫자 값으로 암묵적 타입 변환이 일어난다. console.log(+'1') // 숫자 값 1 console.lop(+true) // 숫자 값 1 console.lop(+false) // 숫자 값 0 console.lop(+undefined) // 숫자 값 NaN 그런데 이항 산술 연산자로 동작하는 숫자 값으로 평가되지 않는 표현식은 숫자 값으로 암묵적 타입 변환이 일어나는데, 그 로직이 궁금하다. (문자열이 1개 이상이면 문자열 연결 연산자로 동작하기 때문에 문자열 연결 연산자를 제외한 ex) true, false, null) console.log(1+true) // 숫자 값 2 위 코드 처럼 true는 숫자 값 1..

-삼항 조건 연산자 var x = 조건식(불리언 값으로 평가되는 표현식) ? true로 평가될 때 반환할 값 : false로 평가될 때 반환할 값 이때, 조건식이 불리언 값으로 평가되지 않으면 암묵적 타입 변환을 하게 되는데, 1이상의 숫자는 true로, 0은 false로 변환된다. 또한 null, undefined도 false로 타입 강제 변환이 일어나는데, 그 로직이 궁금하다. 1) null은 숫자로 형변환 하면 0이 되는데, 그렇다면 null > 0 > false로 가는것인지? 2) undefined은 숫자로 암묵적 타입 변환 하면 NaN이 되는데, 어떻게 false값으로 변환되는지? 답 : 삼항 조건 연산자에서 암묵적 타입 변환은 조건식이 불리언 값으로 평가되어야 하기 때문에 이뤄지는 것이다. 즉..