기본 참조 타입

목차- 5.1 Date

  • 5.2 RegExp
  • 5.2.1 RegExp 인스턴스 속성
  • 5.2.2 RegExp 인스턴스 메서드
  • 5.2.3 RegExp 생성자 속성
  • 5.3 원시 래퍼 타입
  • 5.3.1 Boolean
  • 5.3.2 Number
  • 5.3.3 String
  • 5.4 싱글톤 내장 객체
  • 5.4.1 Global
  • 5.4.2 Math

�조 값(또는 객체)은 특정 참조 타입의 인스턴스입니다. ECMAScript에서 참조 타입은 데이터와 기능을 하나의 구조로 조직하는 방법입니다. 참조 타입은 때때로 "객체 정의"(클래스가 아님)라고도 불리며, 자신의 객체가 가져야 할 속성과 메서드를 설명합니다. 객체는 특정 참조 타입의 인스턴스로 간주됩니다. 새로운 객체는 new 연산자 뒤에 생성자 함수를 사용하여 생성됩니다. 생성자는 새로운 객체를 생성하는 데 사용되는 함수입니다.

5.1 Date

ECMAScript의 Date 타입은 날짜를 *협정 세계시(UTC, Universal Time Coordinated, 가장 중요한 세계 시간 표준으로, 원자 시간 초 길이를 기반으로하며 그리니치 표준 시간에 최대한 가깝게 시간을 표현함)가 1970년 1월 1일 0시부터 경과한 밀리초 수로 저장합니다. 이러한 저장 형식을 사용하여 Date 타입은 1970년 1월 1일 전후 285,616년의 날짜를 정확하게 표현할 수 있습니다.

let 현재시간 = new Date();
console.log(현재시간); //2021-06-21T13:36:44.910Z Date()에 매개변수를 전달하지 않으면 현재 날짜와 시간이 저장된 객체가 생성됩니다

다른 날짜와 시간을 기반으로 날짜 객체를 생성하려면 밀리초 표현(UNIX 시대 1970년 1월 1일 0시 이후의 밀리초 수)(UNIX 시대는 Unix 또는 유닉스 계열 시스템, 일부 C/C++, Java 등 프로그래밍 언어에서 사용하는 시대로 1970년 1월 1일 00:00부터 시작)을 전달해야 합니다. ECMAScript는 Date.parse()와 Date.UTC()라는 두 가지 보조 메서드를 제공합니다.

let 날짜1 = new Date("1/2/2018");//문자열을 직접 전달하면 내부적으로 Date.parse()를 호출한 후 Date()에 전달합니다
let 날짜2 = new Date(Date.parse("1/2/2018"));

console.log(날짜1);//2018-01-01T16:00:00.000Z
console.log(날짜2);//2018-01-01T16:00:00.000Z
console.log(Date.parse("1/2/2018")); //1514822400000

1월 32일과 같은 범위를 벗어난 날짜는 일부 브라우저에서 2월 1일로 해석되고, 일부는 해당 월의 현재 날짜로 해석되므로 미리 확인해야 합니다.

Date.UTC() 메서드도 날짜의 밀리초 표현을 반환하며, 전달되는 매개변수는 연도, 월(0-11), 일, 시간(0-23), 분, 초, 밀리초입니다. 이 매개변수 중 연도와 월만 필수이며, 일을 제공하지 않으면 기본값이 1일이고 다른 매개변수의 기본값은 0입니다.

let 밀레니엄 = new Date(Date.UTC(2000,0));//GMT 시간 2000년 1월 1일 0시
let 모든다섯 = new Date(Date.UTC(2005,6,7,12,54,12,111));

let 밀레니엄 = new Date(2000,0);//Date.UTC()로 생성한 날짜와 동일하지만, 로컬 시간대의 2000년 1월 1일 0시
let 모든다섯 = new Date(2005,6,7,12,54,12,111);

let 시작 = Date.now();
작업수행();
let 종료 = Date.now();
결과 = 종료 - 시작;//실행 시간 테스트

  • 상속된 메서드

다른 타입과 마찬가지로 Date 타입은 toLocaleString(), toString()과 value() 메서드를 재정의합니다.

Date.toLocaleString();//브라우저가 실행되는 로컬 환경과 일치하는 날짜와 시간을 반환하며, 형식에 AM 또는 PM이 포함되지만 시간대 정보는 포함하지 않습니다
Date.toString();//시간대 정보를 포함한 날짜와 시간을 반환하며, 시간은 24(0-23)시간제로 표시됩니다.
Date.Value();//날짜의 밀리초 표현을 반환

  • 날짜 형식화 메서드(P106)
  • 날짜/시간 구성 요소 메서드

5.2 RegExp

ECMAScript는 RegExp 타입을 통해 정규 표현식을 지원합니다. 정규 표현식 생성:

let 표현식 = /패턴/플래그;
let 표현식 = new RegExp(패턴,플래그);//생성자를 사용하여 생성할 수도 있으며, 두 매개변수 모두 문자열이므로 따옴표를 추가해야 합니다

패턴에는 문자 클래스, 한정자, 그룹화, 전방 참조 및 역참조가 포함됩니다. 플래그는 선택 사항이며 0개 이상이며, 정규 표현식의 동작을 제어하는 데 사용됩니다.

//플래그:
g:전역 모드, global
i:대소문자 구분 없음, ignoreCase
m:다중 행 모드, multiline, 텍스트 한 줄 끝까지 찾은 후 계속 검색
y:끈적임 모드, sticky, lastIndex부터 시작하는 문자열만 검색
u:유니코드 모드, 유니코드 일치 활성화
s:dotAll 모드, 메타 문자 .가 모든 문자(\n 또는 \r 포함)와 일치함

let 패턴1 = /at/g;문자열의 모든 "at" 일치
let 패턴2 = /[bc]at/i;첫 번째 "bat" 또는 "cat" 일치, 대소문자 구분 없음
let 패턴3 = /.at/gi;모든 "at"로 끝나는 3자 문자 조합 일치, 대소문자 구분 없음

메타 문자(괄호, 더하기, 곱하기, \, ^, $, |, ?, ., /)는 정규 표현식에서 하나 이상의 특수 기능을 가지므로, 이러한 문자 자체를 일치시키려면 역슬래시 \로 이스케이프해야 합니다.

let p1 = /\[bc\]at/i;첫 번째 "[bc]at" 일치, 대소문자 구분 없음
let p2 = /\.at/gi;모든 ".at" 일치, 대소문자 구분 없음

RegExp() 생성자를 사용하여 정규 표현식을 생성할 때, 전달되는 매개변수가 문자열이므로 이중 이스케이프가 필요할 수 있습니다.

let p1 = new RegExp(".at","gi");
let p2 = new RegExp("\.at","gi");
let p3 = new RegExp("\\.at","gi");

let 텍스트 = "but he at school,.at";

let 일치1 = p1.exec(텍스트);
let 일치2 = p2.exec(텍스트);
let 일치3 = p3.exec(텍스트);

console.log(일치1);//[ ' at', index: 6, input: 'but he at school,.at', groups: undefined ]
console.log(일치2);//[ ' at', index: 6, input: 'but he at school,.at', groups: undefined ], 첫 번째 경우와 동일한 효과
console.log(일치3);//[ '.at', index: 17, input: 'but he at school,.at', groups: undefined ], "\\"만이 ".at"을 찾는 목적을 표현할 수 있습니다

또한, 기존 정규 표현식 인스턴스를 기반으로 RegExp를 사용할 수도 있습니다.

const re1 = /cat/g;
const re2 = new RegExp(re1);"/cat/g"
const re3 = new RegExp(re2,"i");"cat/i", 플래그를 "i"로 수정했습니다

5.2.1 RegExp 인스턴스 속성

let p1 = /\[bc\]at/i;
p1.global;//g 플래그가 설정되었는지 여부
p1.ignoreCase;//i 플래그가 설정되었는지 여부
p1.multiline;//m 플래그가 설정되었는지 여부
p1.lastIndex;//원본 문자열에서 다음 검색 시작 위치
p1.source;//"\[bc\]at", 정규 표현식 리터럴 문자열
p1.flags;//"i", 정규 표현식 플래그 문자열

5.2.2 RegExp 인스턴스 메서드

let 텍스트 = "mom and dad and baby";
let 패턴 = /mom( and dad( and baby)?)?/gi;

let 일치 = 패턴.exec(텍스트);//주요 메서드

console.log(일치.index);//0, 문자열에서 패턴이 시작되는 위치
console.log(일치.input);"mom and dad and baby", 검색할 문자열
console.log(일치[0]);"mom and dad and baby", 일치하는 전체 문자열
console.log(일치[1]);" and dad and baby", 첫 번째 캡처 그룹의 일치하는 문자열
console.log(일치[2]);" and baby", 두 번째 캡처 그룹의 일치하는 문자열

패턴이 전역 모드인 경우, exec() 메서드를 호출할 때마다 다음 일치 항목의 정보가 반환됩니다. 전역 플래그가 설정되지 않은 경우, 동일한 문자열에 대해 exec()를 여러 번 호출해도 첫 번째 일치 항목의 정보만 반환됩니다.

전역 모드에서는 exec()를 호출할 때마다 lastIndex 값이 업데이트되며, 이는 마지막으로 일치한 마지막 문자의 다음 문자의 인덱스를 나타냅니다. 패턴에 끈적임 플래그 y가 설정된 경우, exec()를 호출할 때마다 lastIndex 위치에서만 일치 항목을 찾습니다. 즉, 끈적임 플래그가 전역 플래그를 덮어씁니다. 일치 항목을 찾지 못하면 lastIndex 값이 0으로 다시 설정됩니다.

let 텍스트 = "0000-00-0000";
let 패턴 = /\d{3}-\d{2}-\d{4}/;

if (패턴.test(텍스트)){ //test() 메서드는 패턴이 일치하는지 테스트하는 데 사용됩니다
    console.log("일치함!")
}

console.log(패턴.toString()); /\d{3}-\d{2}-\d{4}/, 정규 표현식 리터럴 표현을 반환
console.log(패턴.toLocaleString()); /\d{3}-\d{2}-\d{4}/, 정규 표현식 리터럴 표현을 반환

5.2.3 RegExp 생성자 속성

RegExp 생성자 자체에도 몇 가지 속성이 있습니다. 다른 언어에서 이러한 속성은 정적 속성이라고 합니다. 이러한 속성은 범위의 모든 정규 표현식에 적용되며, 마지막으로 실행된 정규 표현식 작업에 따라 변경됩니다. 이러한 속성은 두 가지 다른 방식으로 접근할 수 있습니다. 하나는 전체 이름이고 다른 하나는 약식입니다.

전체 이름 약식 설명
input $_ 마지막으로 검색된 문자열(표준 기능 아님)
lastMatch $& 마지막으로 일치한 텍스트
lastParen $+ 마지막으로 일치한 캡처 그룹(표준 기능 아님)
leftContext $` lastMatch 앞에 있는 input 문자열
rightContext $' lastMatch 뒤에 있는 input 문자열
let 텍스트 = "this has been a short summer";
let 패턴 = /(..)or(.)/g;

if (패턴.test(텍스트)){
    console.log(RegExp.input);this has been a short summer
    console.log(RegExp.leftContext);this has been a
    console.log(RegExp.rightContext); summer
    console.log(RegExp.lastMatch); short
    console.log(RegExp.lastParen); t
    console.log(RegExp.$1); sh, 첫 번째 캡처 그룹의 일치 항목
    console.log(RegExp.$2); t, 두 번째 캡처 그룹의 일치 항목, 최대 9개
}

5.3 원시 래퍼 타입

원시 값을 쉽게 조작하기 위해 ECMAScript는 Boolean, Number, String의 3가지 특별한 참조 타입을 제공합니다. 이러한 타입은 다른 참조 타입과 일부 동일한 특징을 가지며, 각자의 원시 타입에 해당하는 특별한 동작을 가지고 있습니다. 원시 값의 메서드나 속성이 사용될 때마다, 백그라운드에는 해당 원시 래퍼 타입의 객체가 생성되어 원시 값을 조작하는 다양한 메서드를 노출합니다.

let s1 = "some text";
let s2 = s1.substring(2);//me text

원시 값 자체는 객체가 아니므로 논리적으로 메서드를 가질 수 없습니다. 그러나 실제로 이 예제는 예상대로 작동합니다. 이는 백그라운드에서 많은 처리가 이루어졌기 때문입니다. 구체적으로, 두 번째 줄에서 s1에 접근할 때, 읽기 모드로 접근합니다. 즉, 메모리에서 변수에 저장된 값을 읽습니다. 문자열 값을 읽기 모드로 접근하는 경우, 백그라운드에서 다음 3단계를 수행합니다:

(1) String 타입의 인스턴스를 생성합니다;

(2) 인스턴스의 특정 메서드를 호출합니다;

(3) 인스턴스를 소멸시킵니다.

다음 3줄 코드를 실행하는 것과 같습니다:

let s1 = new String("some text");
let s2 = s1.substring(2);
s1 = null;

이러한 동작은 원시 값이 객체처럼 동작할 수 있게 해줍니다. 참조 타입과 원시 래퍼 타입의 주요 차이점은 객체의 생명 주기에 있습니다. new를 사용하여 참조 타입을 인스턴스화한 후, 인스턴스는 범위를 벗어날 때 소멸되지만, 자동으로 생성된 원시 래퍼 객체는 해당 코드가 실행되는 동안만 존재합니다.

let s1 = "some text";
s1.color = "red";
cosole.log(s1.color); // undefined, 두 번째 줄에서 임시 객체를 생성하고, 세 번째 줄이 실행될 때 이미 객체가 소멸되었습니다

5.3.1 Boolean

let 거짓객체 = new Boolean(false);
let 결과 = 거짓객체 & 결과;//여기서는 거짓객체 객체 자체를 평가하는 것이 아니라, 그것이 나타내는 값을 평가하는 것입니다. 모든 객체는 부울 표현식에서 자동으로 true로 변환됩니다
console.log(결과); //true

let 거짓값 = false;
typeof 거짓객체;//object
typeof 거짓값;//boolean

거짓객체 instanceof Boolean;//true
거짓값 instanceof Boolean;//false

5.3.2 Number

let 숫자 = 10;

숫자.toString();//"10", 숫자 문자열 반환
숫자.toString(2);//"1010", 전달된 매개변수는 진법을 나타냅니다
숫자.toString(16);//"a"

숫자.toFixed(2);//"10.00", 지정된 소수 자릿수를 포함하는 숫자 문자열 반환

숫자.toExponential(1);//"1.0e+1", 과학적 표기법으로 표현된 숫자 문자열 반환, 받은 매개변수는 결과의 소수 자릿수를 나타냅니다

숫자.toPrecision(1);//"1e+2", 가장 합리적인 출력 결과를 반환하며, 받은 매개변수는 결과의 총 자릿수(지수 제외)를 나타냅니다

Number.isinteger(1);//true
Number.isinteger(1.00);//true
Number.isinteger(1.01);//false

Number.MIN_SAFE_INTEGER:-1*(2**53) + 1
Number.MAX_SAFE_INTEGER:2**53 - 1//각각 안전하게 저장할 수 있는 정수의 상한과 하한을 나타내며, 이를 초과하는 값은 안전하게 저장할 수 없습니다. IEEE 754 인코딩 형식은 이진 값이 완전히 다른 숫자로 표현될 수 있음을 의미합니다

Number.issafeInteger(-1*(2**53));//false
Number.issafeInteger(-1*(2**53)+1);//true
Number.issafeInteger(2**53);//false
Number.issafeInteger(2**53-1);//true

5.3.3 String

let 문자열값 = "hello world";
console.log(문자열값.length);//11

  • JavaScript 문자(이 부분은 추가 학습이 필요합니다)

JavaScript 문자열은 16비트 코드 단위(code unit)로 구성됩니다. 대부분의 문자의 경우 각 16비트 코드 단위는 하나의 문자에 해당합니다. 다시 말해, 문자열의 length 속성은 문자열에 포함된 16비트 코드 단위의 수를 나타냅니다.

let 메시지 = "abcde";

메시지.length; //5
메시지.charAt(2);"c", 지정된 위치의 코드 단위를 찾아 해당 코드 단위에 해당하는 문자를 반환
메시지.charCodeAt(2);99, 지정된 코드 단위의 문자 코드를 확인

String.fromCharcode(97,98,99,100,101);"abcde", 문자 코드를 기반으로 문자를 반환하고 결합
String.fromCharcode(0x61,0x62,0x63,0x64,0x65);"abcde", 16진수도 사용 가능, 16비트 코드 단위

16비트는 65536개의 문자를 고유하게 표현할 수 있으며, 이는 대부분의 문자 세트에 충분합니다. Unicode에서 이를 기본 다국어 평면(BMP)이라고 합니다. UTF-16은 총 17개 평면을 가지며, 보조 문자 평면의 문자를 표현할 때 65536개의 코드 포인트가 충분하지 않을 수 있습니다. 더 많은 문자를 표현하기 위해 Unicode는 하나의 문자에 추가 16비트를 사용하여 보조 평면을 선택하는 전략을 채택합니다. 이러한 각 문자에 두 개의 16비트 코드 단위를 사용하는 전략을 대리 쌍(surrogate pair)이라고 합니다.

let 메시지 = "ab🙂de";

console.log(메시지.length);//6
console.log(메시지.charAt(1));//b
console.log(메시지.charAt(2));//<?>
console.log(메시지.charAt(3));//<?>
console.log(메시지.charAt(4));//d

console.log(메시지.charCodeAt(1));//98
console.log(메시지.charCodeAt(2));//55357
console.log(메시지.charCodeAt(3));//56898, 두 개의 16비트 코드 단위가 하나의 기호를 표현
console.log(메시지.charCodeAt(4));//100

console.log(메시지.codePointAt(1));//98
console.log(메시지.codePointAt(2));//128578, 코드 포인트는 Unicode에서 문자의 완전한 식별자입니다
console.log(메시지.codePointAt(3));//56898
console.log(메시지.codePointAt(4));//100

console.log([...메시지]);

console.log(String.fromCharCode(97,98,55357,56898,100,101));
console.log(String.fromCharCode(97,98,128578,100,101));

  • normalize() 메서드

일부 Unicode 문자는 여러 인코딩 방식으로 표현될 수 있습니다. 일부 문자는 하나의 BMP 문자로 표현할 수도 있고 대리 쌍으로 표현할 수도 있습니다. 때로는 동일해 보이는 문자가 실제로는 서로 다를 수 있습니다. 이 문제를 해결하기 위해 Unicode는 4가지 정규화 형식을 제공하며, 이를 통해 문자를 일관된 형식으로 정규화할 수 있습니다. 4가지 정규화 형식은 다음과 같습니다: NFD(Normalization Form D), NFC(Normalization Form C), NFKD(Normalization Form KD), NFKC(Normalization Form KC). normalize() 메서드를 사용하여 문자열에 이러한 정규화 형식을 적용할 수 있습니다.

  • 문자열 조작 메서드
let 문자열값 = "hello ";
let 결과 = 문자열값.concat("world");// "hello world"
문자열값.slice(3,7);"lo w", 첫 번째 매개변수는 문자열 시작 위치, 두 번째 매개변수는 문자열 끝 위치
문자열값.substring(3,7);"lo w", 첫 번째 매개변수는 문자열 시작 위치, 두 번째 매개변수는 문자열 끝 위치
문자열값.substr(3,7);"lo worl", 첫 번째 매개변수는 문자열 시작 위치, 두 번째 매개변수는 반환되는 문자열의 수

문자열값.slice(-3);"rld", 첫 번째 매개변수가 음수이면 뒤에서부터 몇 개의 문자인지 나타냅니다
문자열값.substring(-3);"hello world", 첫 번째 매개변수가 음수이면 0으로 변환됩니다
문자열값.substr(-3);"rld", 첫 번째 매개변수가 음수이면 뒤에서부터 몇 개의 문자인지 나타냅니다

문자열값.slice(3,-4);"lo w", 두 번째 매개변수가 음수이면 뒤에서부터 지정된 위치까지의 문자열을 나타냅니다
문자열값.substring(3,-4);"hel", 두 번째 매개변수가 음수이면 0으로 변환되어 substring(0,3)과 동일합니다
문자열값.substr(3,-4);"", 두 번째 매개변수가 음수이면 0으로 변환되어 0개의 문자를 포함함을 의미합니다

  • 문자열 위치 메서드
let 문자열값 = "hellow world";
문자열값.indexOf("o");//4
문자열값.lastIndexOf("o");//7, 문자열 끝에서부터 문자열을 검색

문자열값.indexOf("o",6);//7, 두 번째 매개변수는 해당 위치에서 검색을 시작함을 나타냅니다
문자열값.lastIndexOf("o",6);//4, 위치 6에서 문자열 시작 부분으로 검색

let 문자열값 = "some text";
let 위치 = new Array();

pos = 문자열값.indexOf("x");
while(pos>-1){
    위치.push(pos);
    pos = 문자열값.indexOf("x",pos+1);
}

  • 문자열 포함 메서드
let 메시지 = "foobarbaz";

메시지.startWith("foo");//true
메시지.endtWith("bar");//false
메시지.include("bar");//true

메시지.startWith("foo",1);//false, 두 번째 매개변수는 검색 시작 위치를 나타냅니다
메시지.include("bar",4);//false, 두 번째 매개변수는 검색 시작 위치를 나타냅니다
메시지.endtWith("bar",6);//false, 두 번째 매개변수는 해당 위치 앞의 문자열이 지정된 문자열로 끝나는지 여부를 나타냅니다

  • trim() 메서드

ECMAScript는 모든 문자열에 trim() 메서드를 제공합니다. 이 메서드는 문자열의 복사본을 생성합니다. 앞뒤의 모든 공백 문자를 삭제한 후 결과를 반환합니다.

let 문자열값 = " hellow world ";
문자열값.trim();
문자열값.trimLeft();
문자열값.trimRight();

  • repeat() 메서드

이 메서드는 정수 매개변수를 받아 문자열을 지정된 횟수만큼 복제한 후, 모든 복제본을 연결한 결과를 반환합니다.

문자열값.repeat(16) + "batman";

  • padStart()와 padEnd() 메서드

이 두 메서드는 문자열을 복제하여 지정된 길이보다 작으면 해당 쪽에 문자를 채워 지정된 길이를 만족시킵니다. 이 두 메서드의 첫 번째 매개변수는 길이이고, 두 번째 매개변수는 선택적 채우기 문자열로 기본값은 공백(U+0020)입니다.

let 문자열값 = "foo";

문자열값.padStart(6);"   foo"
문자열값.padStart(9,".");"......foo"

문자열값.padEnd(6);"foo   "
문자열값.padEnd(9,".");"foo......"

문자열값.padStart(8,"bar");"barbafoo"
문자열값.padStart(2);"foo", 길이가 문자열 길이보다 작으면 원본 문자열을 반환

문자열값.padEnd(8,"bar");"foobarbarba"
문자열값.padEnd(2);"foo", 길이가 문자열 길이보다 작으면 원본 문자열을 반환

  • 문자열 반복 및 구조 분해

문자열의 프로토타입에는 @@iterator 메서드가 노출되어 있어 문자열의 각 문자를 반복할 수 있습니다.

let 메시지 = "abc";
let 문자열반복자 = 메시지[Symbol.iterator]();

문자열반복자.next();//{value:"a",done:false}
문자열반복자.next();//{value:"b",done:false}
문자열반복자.next();//{value:"c",done:false}
문자열반복자.next();//{value:undefined,done:true}

for (const c of "abcde"){
    console.log(c);
}

console.log([...메시지]);//["a","b","c","d","e"]

  • 문자열 대소문자 변환

toLowerCase()와 toUpperCase() 메서드는 기존에 존재하는 메서드입니다. toLocaleLowerCase()와 toLocaleUpperCase() 메서드는 특정 지역을 기반으로 구현되도록 설계되었습니다. 많은 지역에서 특정 지역 메서드와 일반 메서드는 동일합니다. 그러나 일부 언어(예: 터키어)에서는 Unicode 대소문자 변환에 특별 규칙을 적용해야 하므로, 올바른 변환을 위해 특정 지역 메서드가 필요합니다.

문자열값.toUpperCase();
문자열값.toLowerCase();
문자열값.toLocaleUpperCase();
문자열값.toLocaleLowercase();

  • 문자열 패턴 일치 메서드
let 텍스트 = "cat,bat,sat,fat";
let 패턴 = /.at/;

let 일치 = 텍스트.match(패턴);
let pos = 텍스트.search(/at/);

let 결과 = 텍스트.replace("at","ond");
결과 = 텍스트.replace(/at/g,"ond");
결과 = 텍스트.replace(/(.at)/g,"word ($1)");//word (cat),word (bat),word (sat),word (fat)

let 색상텍스트 = "red,blue,green,yellow";
색상텍스트.split(",");["red","blue","green","yellow"]
색상텍스트.split(",",2);["red","blue"]
색상텍스트.split(/[^,]+/);["",",",",",",",",","];//?

  • localeCompare() 메서드
let 문자열값 = "yellow";

console.log(문자열값.localeCompare("brick"));//1, 매개변수 문자열이 대상 문자열 앞에 있으면 1을 반환
console.log(문자열값.localeCompare("yellow"));//0, 두 문자열이 같음
console.log(문자열값.localeCompare("zoo"));//-1, 매개변수 문자열이 대상 문자열 뒤에 있으면 -1을 반환

5.4 싱글톤 내장 객체

ECMA-262는 내장 객체를 "ECMAScript 구현에서 제공하며, 호스트 환경과 무관하며 ECMAScript 프로그램이 시작될 때부터 존재하는 객체"로 정의합니다. 이는 개발자가 명시적으로 인스턴스화할 필요가 없음을 의미하며, 이미 인스턴스화되어 있습니다. 내장 객체에는 Object, Array, String, Global, Math 등이 포함되지만 이에 국한되지는 않습니다.

5.4.1 Global

ECMA-262는 Global 객체를 기본 객체로 규정하며, 이는 어떤 객체에도 속하지 않는 속성과 메서드를 대상으로 합니다. 사실상 전역 변수나 전역 함수와 같은 것은 존재하지 않습니다. 전역 범위에서 정의된 변수와 함수는 모두 Global 객체의 속성이 됩니다. isNaN(), isFinite(), parseInt() 및 parseFloat()는 실제로 Global 객체의 메서드입니다.除此之外, Global 객체에는 몇 가지 다른 메서드도 있습니다.

  • URL 인코딩 메서드

encodeURI()와 encodeURIComponent() 메서드는 URI(Uniform Resource Identifier)를 인코딩하는 데 사용됩니다. 유효한 URI는 일부 문자(예: 공백)를 포함할 수 없습니다. URI 인코딩 메서드를 사용하여 URI를 인코딩하면 브라우저가 이를 이해할 수 있으며, 동시에 모든 유효하지 않은 문자를 특별한 UTF-8 인코딩으로 대체합니다.

let uri = "http://www.baidu.com/illegal value.js#start";
console.log(encodeURI(uri));
//http://www.baidu.com/illegal%20value.js#start
//encodeURI()는 URL 구성 요소의 특수 문자(예: 콜론, 슬래시, 물음표, 해시)를 인코딩하지 않습니다

console.log(encodeURIComponent(uri));
//http%3A%2F%2Fwww.baidu.com%2Fillegal%20value.js%23start
//encodeURIComponent()는 발견하는 모든 비표준 문자를 인코딩합니다

console.log(decodeURI(encodeURI(uri)));
//http://www.baidu.com/illegal value.js#start
console.log(decodeURIComponent(encodeURIComponent(uri)));
//http://www.baidu.com/illegal value.js#start

  • eval() 메서드

이 메서드는 완전한 ECMAScript 인터프리터이며, 실행할 ECMAScript 문자열을 매개변수로 받습니다. 인터프리터가 eval() 호출을 발견하면 매개변수를 실제 ECMAScript 문으로 해석한 후 해당 위치에 삽입합니다.

let msg = "hello world";
eval("console.log(msg)"); // "hello world"

eval("function sayHi(){ console.log('hi');}");
sayHi(); // "hi", eval() 내부에 함수나 변수를 정의한 후 외부 코드에서 사용할 수 있습니다

eval("let msg = 'hello world';");
console.log(msg); //ReferenceError: msg is not defined

eval("var msg = 'hello world';");
console.log(msg); // "hello world"

  • Global 객체 속성

undefined, NaN, Infinity와 같은 특별한 값은 Global 객체의 속성이며, 모든 네이티브 참조 타입 생성자(예: Object, function)도 Global 객체의 속성입니다.

//Global 객체 속성
undefined;
NaN;
Infinity;
Object;
Array;
Function;
Boolean;
String;
Number;
Date;
RegExp;
Symbol;
Error;
EvalError;
RangeError;
ReferenceError;
SyntaxError;
TypeError;
URIError;

  • window 객체

ECMA-262는 Global 객체에 직접 접근하는 방식을 규정하지 않았지만, 브라우저는 window 객체를 Global 객체의 프록시로 구현합니다. 따라서 모든 전역 범위에서 선언된 변수와 함수는 window의 속성이 됩니다.

var color = "red";
function sayColor(){
    console.log(window.color);
}
window.sayColor(); // "red"

//전역 변수 가져오기
let global = function(){
    return this;
}();//직접 호출할 때, 함수가 명시적으로 this 값을 지정하지 않고 실행될 때 this 값은 global 객체와 같습니다

5.4.2 Math

Math.max(3,52,81,3);

let 값 = [1,2,9,6];
Math.max(...값);

Math.ceil(23.8);
Math.floor();
Math.round(12.4);//12, 단 하나의 매개변수만 받음
Math.fround();//가장 가까운 단정밀도(32비트) 부동 소수점 값 표현을 반환

Math.random(); //0에서 1 사이의 난수를 반환하며 0은 포함하지만 1은 포함하지 않음

태그: JavaScript ECMAScript Date RegExp Boolean

5월 26일 02:07에 게시됨