strict mode
function foo(){
x=10;
}
foo()
console.log(x)
결과는? 10이 출력된다.
키워드 없이 그냥 선언된 변수 x는 자바스크립트 엔진이 어디서 변수가 선언됬는지 찾다가 x변수가 선언된것이 없기에 암묵적으로 전역 객체에 x 프로퍼티를 생성한다.
이렇게 생성된 x는 전역변수로 사용할 수 있고 이것을 '암묵적 전역' 이라고 한다.
'use strict';
~~
JS파일에 최상단에서 볼 수 있는 문구다. 'use strict' -> 스크립트 전체에 strict mode가 적용되서 ES-lint와 같이 에러를 잡아주는 역할을 한다.
작업시 최상단에 입력해두고 작업하길 바란다.
빌트인 객체
표준 빌트인 객체
ECMAScript 사양에 정의된 객체를 말하며 애플리케이션 전역의 공통 기능을 제공한다.
표준 빌트인 객체는 자바스크립트 실행 환경과 관계 없이 언제나 사용할 수 있다.
Math,Reflect,Json을 제외한 표준 빌트인 객체는 모두 인스턴스를 생성할 수 있는 생성자 함수 객체다.
-표준 빌트인 객체를 생성자 함수로서 호출하여 생성한 인스턴스 프로토는 자신은 생성한 생성자함수의 프로토타입
const strObj=new String('hi')
console.log(Object.getprototypeOf(strObj)===String.prototype) //true
-표준 빌트인 객체는 프로토타입 메서드와 정적 메서드를 제공한다.
toFixed는 프로토타입 메서드
isInteget은 Number의 정적 메서드다.
const numObj=new Number(1.2);
numObj.toFixed() => 1
numObj.isInteger() => Error
호스트 객체
ECMAScript 사양에 정의되어 있지 않지만 자바스크립트 실행 환경에서 추가로 제공하는 객체를 말한다.
DOM,Canvas,XMLHttpRequest,fetch 등등 클라이언트 사이드 Web API를 호스트 객체로 제공하고,Node.js 환경에서는
Node.js 고유의 API를 호스트 객체로 제공한다.
사용자 정의 객체
사용자가 직접 정의한 객체
원시값과 래퍼 객체
원시값이 있는데도 String,Number,Boolean과 같은 표준 빌트인 생성자 함수가 존재하는이유??
원시값은 객체가 아니므로 프로퍼티나 메서드를 가질 수 없는데도 원시값인 문자열이 마치 객체처럼 작동한다
const str='hi';
str.length // 5
str.toUpperCase() // HI
자바스크립트 엔진) 원시값+ 마침표 표기법(대괄호 표기법)으로 접근하면 일시적으로 원시값을 연관된 객체로 변환한다
원시값을 객체처럼 사용하면 자바스크립트 엔진은 암묵적으로 연관된 객체를 생성하여 생성된 객체로 프로퍼티에 접근
메서드를 호출하고 다시 원시값으로 되돌린다.
이처럼 문자열,숫자,불리언 값에 대해 객체처럼 접근하면 생성되는 임시 객체를 Wrapper object라고 한다.
*참조값: 여러 값으로 구성되는 메모리에 저장된 객체
const str='hi'
str은 암묵적으로 생성된 래퍼(Wrapepr) 객체를 가리킨다.
str의 값 'hi'는 래퍼 객체의 [[StringData]] 내부 슬롯에 할당된다.
name 프로퍼티 동적 추가
str.name='Kr'
식별자 str은 다시 원래의 문자열, 즉 래퍼 객체의 [[StringData]] 내부 슬롯에 할당된 원시값을 가진다
래퍼 객체를 참조하는 대상이 없으므로 Garbage Collection의 대상이 된다
식별자 str선언 -> .name을 붙이면 일시적으로 래퍼 객체로 변환 -> 이후 참조값 X -> 가비지 컬랙션->
str.name을 log 찍어봐도 undefined 가 나옴
전역 객체
전역객체는 코드가 실행되기 이전 단계에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체이며
어떤 객체에도 속하지 않은 최상위 객체이다.
특징>
- 개발자가 의도적으로 생성 X , 전역 객체 생성자 함수가 제공되지 않음
- 전역 객체의 프로퍼티를 참조할 때 window(or global)를 생략할 수 있다.
※ globalThis
ECMAScript2020(ES11)에서 도입된 브라우저 환경과 Node.js 환경에서 전역 객체를 가리키던 다양한 식별자를 통일한 식별자.
빌트인 전역 프로퍼티
Infinity, NaN ,undefined
빌트인 전역 함수(필요할 때 찾아보기)
eval : 문자열 코드가 표현식이면 런타임에 평가하여 값을 생성하고 표현식이 아닌 문 이라면 런타임에 실행한다.
@param {string} code -코드를 나타내는 문자열
@returns {*} 문자열 코드느 평가/실행한 결과값
런타임에 평가 값 생성
eval('1+2=;'); -> 3
런타임에 실행
eval('var x=5;');
console.log(x) => 5
isFinite : 전달받은 인수가 정상적인 유한수인지 검사 -> 유한수면 True 무한수면 false 인수가 NaN을 평가되면 false
isNaN : 전달받은 인수가 NaN인지 검사하여 불리안 타입으로 반환
parseFloat(Int)
encodeURI / decodeURI
인코딩 : URI의 문자들을 *이스케이프 처리하는 것을 의미한다.
*이스케이프 처리 => 네트워크를 통해 정보를 공유할 때 어떤 시스템에서도 읽을 수 있는 아스키 문자 셋으로 변환하는것이다.
encodeURIComponent / decodeURIComponent
URI : Uniform Resource identifier 인터넷에 있는 자원을 나타내는 유일한 주소

암묵적 전역
앞에서 다뤄봤지만 개념을 확실하게 하기위해서 예제로 한번더 복습한다.
log(x) //undefined
log(y) //ReferenceError : y is not defined
var x=1;
function foo(){
y=20 //window.y=20 암묵적 전역
}
foo()
x+y => 30
delete x; //전역변수는 삭제 X
delete y; //프로퍼티는 삭제된다.
y라는 변수를 전역 객체에 프로퍼티를 동적 생성한다. 그래서 y는 전역 객체의 프로퍼티가 되어 전역 변수로 동작한다.
하지만, y는 단지 전역 객체의 프로퍼티로 추가되었을 뿐이다
-> y는 변수가 아니다. 그래서 변수 호이스팅이 발생하지 않는다.
[참고]:https://programming119.tistory.com/194
[네트워크📶] URI 란 ? / URI VS URL VS URN 차이 /
URI (Uniform Resource Identifier) 인터넷 자원을 나타내는 고유 식별자 입니다. URI 에 I 가 Identifier 입니다. 인터넷에 있는 자료의 id 이다 , 라고 생각하면 좋을 것 같습니다. 다른 자료가 똑같은 이름을..
programming119.tistory.com
'JavaScript' 카테고리의 다른 글
| 클로저(Closure) (0) | 2022.06.13 |
|---|---|
| this / 실행 컨텍스트 (0) | 2022.06.09 |
| 함수와 일급 객체 (1) | 2022.05.14 |
| 생성자 함수 (0) | 2022.05.14 |
| 스코프 / 프로퍼티 어트리뷰트 (1) | 2022.05.14 |