컴퓨터 프로그램이 작동하려면 숫자 3.14나 "hello world"라는 텍스트와 같은 값의 연산이 필요합니다. 프로그래밍 언어에서는 표현하고 조작할 수 있는 값의 유형을 데이터 유형( 유형) 프로그래밍 언어의 가장 기본적인 기능은 여러 데이터 유형을 호스팅하는 것입니다. 프로그램이 나중에 사용하기 위해 값을 저장해야 하는 경우 해당 값을 변수에 할당(값을 "저장")합니다. 변수는 값에 대한 기호 이름이며 값에 대한 참조는 이름으로 얻을 수 있습니다. 변수가 작동하는 방식은 프로그래밍 언어의 기본 기능입니다. 본 장에서는 본 장의 내용에 대한 이해를 돕기 위해 이전 절을 참조하며, 이후에 더 자세히 설명합니다.
자바스크립트 데이터는 기본 유형과 객체 유형의 두 가지 범주로 나뉩니다
JavaScript의 원래 클래스에는 숫자, 문자열 및 부울 값이 포함됩니다. 이 장에는 JavaScript의 숫자, 문자열 및 부울 값을 다루는 별도의 장이 있습니다. JavaScript에는 Null(비어 있음) 및 정의되지 않음(정의되지 않음)이라는 두 가지 특수 기본 값도 있습니다. 이 값은 숫자, 문자열 또는 부울 값이 아닙니다. 이들은 각각 고유한 특수 유형의 고유한 구성원을 나타냅니다.
자바스크립트는 숫자, 문자열, 부울 값, null, undef 이외의 객체입니다. 객체는 속성의 모음입니다. 각 속성은 "이름/값 쌍"으로 구성됩니다(값은 숫자, 문자열 또는 개체와 같은 기본 값일 수 있음). 좀 더 특별한 객체 중 하나(전역 객체는 Miss 5에서 소개될 예정이며 자세한 내용은 섹션 6에서 설명합니다)
일반적인 JavaScript 객체는 "명명된 값"의 불필요한 컬렉션입니다. JavaScript는 또한 번호가 매겨진 값의 정렬된 컬렉션을 나타내는 배열이라는 특수 개체를 정의합니다. JavaScript는 배열에 대한 특별한 구문을 정의합니다. 배열이 일반 객체와는 다른 몇 가지 고유한 동작 속성을 갖도록 만듭니다.
Javascript는 특수 객체 기능도 정의합니다. 함수는 실행 가능한 코드가 연결된 개체입니다. 함수는 실행 가능한 코드를 실행하고 작업 결과를 반환하기 위해 호출됩니다. 배열과 마찬가지로 함수도 다른 객체와 다르게 동작합니다. JavaScript는 함수 사용을 위한 특수 구문을 정의합니다. 자바스크립트 함수의 경우. 가장 중요한 것은 그것들이 모두 참값이고 JavaScript가 이를 일반 객체처럼 처리할 수 있다는 것입니다.
함수가 새 객체를 초기화(new 연산자 사용)하는 경우 이를 생성자라고 부릅니다. 각 생성자는 객체 클래스, 즉 생성자가 초기화하는 객체 컬렉션을 정의합니다. 클래스는 객체 유형의 하위 유형으로 생각할 수 있습니다. 배열 클래스와 함수 클래스 외에도 JavaScript는 세 가지 유용한 클래스도 정의합니다. Date는 날짜를 나타내는 객체를 정의합니다. 정규(regExp) 객체는 정규식을 정의합니다. 오류 클래스는 JavaScript 프로그램의 런타임 오류 및 구문 오류를 나타내는 개체를 정의합니다. 자신만의 생성자를 정의하여 필요한 클래스를 정의할 수 있습니다.
JavaScript 인터프리터에는 메모리에 대한 가비지 수집을 자동으로 수행할 수 있는 자체 메모리 관리 메커니즘이 있습니다. 이는 프로그램이 요청에 따라 객체를 생성할 수 있으며 프로그래머는 이러한 객체의 파괴와 메모리 재활용에 대해 걱정할 필요가 없음을 의미합니다. 객체에 대한 참조가 더 이상 없으면 인터프리터는 객체가 더 이상 유용하지 않다는 것을 알고 객체가 차지하는 메모리 리소스를 자동으로 회수합니다.
자바스크립트는 객체지향 언어입니다. 대략적으로 말하자면, 이는 다양한 유형의 값을 작동하기 위해 전역적으로 함수를 정의할 필요가 없음을 의미합니다. 데이터 유형 자체는 값을 사용하는 메소드를 정의할 수 있습니다. 예를 들어 배열 a의 요소를 정렬할 필요가 없습니다. a sort() 함수를 입력하고 sort() 메서드를 호출합니다
a.sort(); //sort(a)의 객체 지향 버전
기술적으로 JavaScript 객체만이 메소드를 가질 수 있습니다. 그러나 숫자, 문자열, 부울 값에도 고유한 메소드가 있습니다. 자바스크립트에서는 null과 undef만이 메소드를 가질 수 없는 값이다.
자바스크립트 유형은 원시 유형과 객체 유형으로 나눌 수 있으며, 메소드를 가질 수 있는 유형과 메소드를 가질 수 없는 유형으로 나눌 수 있습니다. 또한 가변형과 불변형으로 나눌 수 있습니다. 변수 유형의 값은 수정될 수 있습니다. 객체와 배열은 변수 유형입니다. JavaScript 프로그램은 객체의 속성 값과 배열 요소의 값을 변경할 수 있습니다.
숫자, 부울 값, null 및 정의되지 않음은 변경할 수 없는 유형입니다. 예를 들어 배열의 내용을 수정하는 것 자체는 의미가 없습니다. 문자열은 문자의 배열로 생각될 수 있으며 변경 가능하다고 생각할 수 있습니다. 그러나 JavaScript에서는 문자열을 변경할 수 없습니다. 문자열의 어느 위치에서나 텍스트에 액세스할 수 있지만 JavaScript는 문자열의 텍스트 내용을 수정하는 방법을 제공하지 않습니다.
자바스크립트는 데이터 유형 변환을 자유롭게 수행할 수 있습니다. 예를 들어, 프로그램이 문자열을 기대하는 곳에 숫자가 사용되면 JavaScript는 자동으로 숫자를 문자열로 변환합니다. 부울 값이 필요한 곳에 부울이 아닌 값이 사용되는 경우 JavaScript는 그에 따라 변환합니다. "동등성"을 위한 JavaScript의 유연한 유형 잡기 및 교환 규칙
자바스크립트 변수는 유형이 지정되지 않습니다. 변수는 인간 및 유형 값을 할당할 수 있습니다. 변수를 선언하려면 var 키워드를 사용하세요. JavaScript는 함수 내에서 선언되지 않은 변수를 전역 변수라고 하며 JavaScript 프로그램의 어느 곳에서나 볼 수 있습니다.
1. 숫자
다른 프로그래밍 언어와 달리 JavaScript는 정수 값과 부동 소수점 값을 구분하지 않습니다. JavaScript의 숫자 값은 부동 소수점 값으로 표현됩니다. 숫자가 JavaScript 프로그램에 직접 나타나는 경우 이를 숫자 리터럴이라고 부릅니다. JavaScript는 다양한 형식의 숫자 리터럴을 지원합니다. (참고: 숫자 바로 앞에 빼기 기호(-)를 추가하면 음수 값이 제공됩니다.) 그러나 빼기 기호는 단항 부정 연산자입니다. , 숫자 리터럴 문법의 일부가 아닙니다. )
i 정수 직접 수량
배열 시퀀스를 사용하여 JavaScript에서 십진 정수를 나타냅니다
10진수 정수 리터럴 외에도 JavaScript는 16진수 메커니즘(16)을 기반으로 하는 값도 기본으로 인식합니다. 소위 16진수에는 "0X" 또는 "0x"라는 접두사가 붙고 그 뒤에 16진수 문자열의 직접적인 양이 붙습니다. 16진수 값은 0~9의 숫자와 a(A)~f(F) 사이의 문자로 구성됩니다. 문자 a-f는 숫자 10-15를 나타냅니다. 다음은 16진수 리터럴
의 예입니다.ECMAScript는 8진수 리터럴을 지원하지 않지만 일부 JavaScript 구현에서는 정수를 8진수(기본 8) 형식으로 표현할 수 있습니다. 8진수 리터럴은 숫자 0으로 시작하고 그 뒤에 0에서 7 사이의 일련의 숫자가 옵니다.
일부 자바스크립트 구현은 8진수 스칼라를 지원하고 일부는 그렇지 않기 때문에 접두사가 0인 정수 스칼라를 사용하지 않는 것이 가장 좋습니다. 결국 현재 자바스크립트 구현이 8진수 구문 분석을 지원하는지 여부를 알 수 있는 방법이 없습니다. ECMAScript 6의 엄격 모드에서는 8진수 리터럴이 명시적으로 금지됩니다.
ii. 부동 소수점 리터럴
부동 소수점 리터럴은 소수점을 포함할 수 있으며 전통적인 실수 작성 방법을 사용합니다. 실수는 정수부, 소수점, 소수부로 구성됩니다.
또한 지수 표기법을 사용하여 부동 소수점 리터럴을 나타낼 수도 있습니다. 즉, 실수 뒤에는 문자 E 또는 e가 오고, 양수 또는 음수 기호가 오고, 정수 지수가 옵니다. 이 계산 방법으로 표시되는 값은 이전 실수의 지수 거듭제곱에 10을 곱한 값입니다.
iii.javascript의 산술 연산
Javascript 프로그램은 언어에서 제공하는 산술 연산자를 사용하여 수치 연산을 수행합니다. 이러한 연산자에는 - * / 및 나머지(나누기 후 나머지) 연산자 %
가 포함됩니다.
기본 연산자 외에도 JavaScript는 더 복잡한 산술 연산도 지원합니다. 이 복잡한 연산은 Math 객체의 속성으로 정의된 함수와 상수를 통해 구현됩니다.
JavaScript의 산술 연산은 오버플로, 언더플로 또는 0으로 나눌 때 오류를 보고하지 않습니다. 그러나 수치연산 결과는 자바스크립트에서 표현할 수 있는 숫자의 상한을 초과(overflow)하고, 그 결과는 자바스크립트에서 무한대로 표현되는 특별한 무한값(infinty) 값이 된다. 마찬가지로 음수의 값이 자바스크립트가 표현할 수 있는 음수의 범위를 초과하는 경우 결과는 음의 무한대가 되는데, 이는 자바스크립트에서 -Infinty로 표현된다. 무한 값은 예상한 대로 동작합니다. 이를 기반으로 덧셈, 뺄셈, 곱셈, 나눗셈을 하면 무한대가 됩니다(기호 보존)
언더플로우는 연산의 결과가 무한히 0에 가까우며 자바스크립트가 표현할 수 있는 최소값보다 작은 경우에 발생하는 상황입니다. 음수가 언더플로우되면 JavaScript는 일반 0과 거의 똑같은 특수 값인 "음수 0"을 반환합니다. JavaScript 프로그래머는 음수 0을 거의 사용하지 않습니다.
Javascript에는 양의 무한대 및 숫자가 아닌 값을 표현하는 데 사용되는 전역 변수 Infinaty 및 NaN이 미리 정의되어 있습니다. ECMAScipt3에서는 이 두 값을 읽고 쓸 수 있습니다. ECMAScript5는 읽기 전용으로 정의하여 이 문제를 해결합니다. ECMAScipt3의 Number 객체로 정의된 속성 값도 읽기 전용입니다.
음수 0 값도 다소 특별합니다. 이는 양수 및 음수 0과 같습니다(심지어 JavaScript의 엄격한 동일성 테스트를 사용하여 판단함). 이는 두 값이 제수라는 점을 제외하면 거의 동일하다는 것을 의미합니다. 🎜>
Javascript는 IEEE-754 부동 소수점 숫자 표현(거의 모든 최신 프로그래밍 언어에서 사용됨)을 사용합니다. 이는 1/2 1/8 및 1/1024와 같은 분수를 정확하게 나타낼 수 있는 이진수 표현입니다. 불행하게도 우리가 특히 재무 계산에서 자주 사용하는 분수는 모두 1/10, 1/100 등입니다. 이진 표현은 0.1과 같은 단순한 숫자를 표현할 수 없습니다.
자바스크립트의 숫자는 충분한 정밀도를 가지고 있습니다. 그리고 0.1에 가까울 수도 있는데, 그 수치를 정확하게 표현할 수 없다는 점에서 문제가 있다.
반올림 오류로 인해 0.3과 0.2의 대략적인 차이는 실제로 0.2와 0.1의 대략적인 차이와 동일하지 않습니다(실제 시뮬레이션 환경에서는 0.3-0.2=0.099 999 999 999 999 98). JavaScript에 고유하지만 이진 부동 소수점 숫자를 사용하는 모든 프로그래밍 언어에서 발생한다는 점을 이해하는 것이 중요합니다. 또한 위 코드에서 x와 y의 값은 서로 매우 가깝고 최종 정확한 값이라는 점에 유의하세요. 이 계산 결과는 대부분의 컴퓨팅 작업에 사용될 수 있습니다. 이 문제는 두 값이 같은지를 비교할 때만 발생합니다.
JavaScript의 향후 버전에서는 이 문제를 피하기 위해 십진수 유형을 지원할 수도 있지만 그때까지는 중요한 재무 계산에 큰 정수를 사용하는 것이 더 나을 수도 있습니다. 예를 들어, 화폐 단위 기반 작업에는 십진수 "달러" 대신 정수 "센트"를 사용합니다.
iiiiii.날짜 및 시간
JavaScript 언어의 핵심에는 원래 날짜 및 시간 개체를 생성하는 Date() 생성자가 포함되어 있습니다. 이러한 날짜 개체의 메서드는 날짜 계산을 위한 간단한 API를 제공합니다. 날짜 개체는 숫자와 같은 기본 데이터 유형이 될 수 없습니다.
2. 텍스트
문자열은 16비트 값의 불변 순서 시퀀스입니다. 각 문자는 일반적으로 유니코드 문자 집합에서 나옵니다. JavaScript는 문자열 유형을 통해 텍스트를 나타냅니다. 문자열의 길이는 포함된 16비트 값의 개수입니다. Javascript 문자열(및 그 배열)은 0부터 시작하여 색인이 지정됩니다. 빈 문자열의 길이는 0이고 JavaScript에는 단일 문자를 나타내는 "문자 유형"이 없습니다. 16비트 값을 나타내려면 문자열 변수에 할당하면 됩니다. 이 문자열의 길이는 1입니다.
문자 세트, 내부 코드 및 자바스크립트 문자열
JavaScript는 UTF-16으로 인코딩된 유니코드 문자 집합을 사용합니다. JavaScript 문자열은 일련화되지 않은 16비트 값 집합으로 구성된 시퀀스입니다. 가장 일반적으로 사용되는 유니코드 문자는 16비트 내부 코드로 표시되며 문자열에서 단일 문자를 나타냅니다. 16비트 문자로 표시할 수 없는 유니코드 문자는 UTF-16 인코딩 규칙을 따릅니다. 두 개의 16비트 문자를 사용합니다. 시퀀스("대리 쌍"이라고도 함)로 표시됩니다. 이는 길이 2(두 개의 16비트 값)의 JavaScript 문자열이 유니코드 문자를 나타낼 수 있음을 의미합니다.
JavaScript에서 정의한 다양한 문자열 연산 방법은 모두 문자가 아닌 16비트 값에서 작동하며 서로게이트 쌍은 별도로 처리되지 않습니다. 마찬가지로 JavaScript는 문자열에 대해 표준화된 처리를 수행하지 않습니다. 문자열이 합법적인 UTF-16 형식이라는 보장은 없습니다
i 문자열 리터럴
JavaScript 프로그램의 문자열 리터럴은 작은따옴표나 큰따옴표로 묶인 문자 시퀀스입니다. 작은따옴표로 구분된 문자열에는 큰따옴표가 포함될 수 있고, 큰따옴표로 구분된 문자열에는 작은따옴표도 포함될 수 있습니다. 다음은 문자열 리터럴의 몇 가지 예입니다.
ECMAScript3에서는 문자열 리터럴을 한 줄로 작성해야 하지만 ECMAScript5에서는 문자열 리터럴을 여러 줄로 나눌 수 있으며 각 줄은 백슬래시(), 백슬래시 및 줄 종결자로 끝나야 합니다. 문자열 리터럴의 내용. 함께 원한다면 사용할 수 있습니다 이스케이프 문자.
문자열을 구분하기 위해 작은따옴표를 사용할 때는 영어의 약어 및 모든 서식에 특히 주의해야 합니다. 영어 아포스트로피와 작은따옴표는 동일한 문자이므로 백슬래시() 이스케이프를 사용해야 합니다.
ii 이스케이프 문자
JavaScript 문자열에서 백슬래시()에는 특별한 목적이 있습니다. 백슬래시 뒤에 문자를 추가하면 더 이상 문자 그대로의 의미를 나타내지 않습니다.
JavaScript에 내장된 기능 중 하나는 문자열 연결입니다. 문자열에 연산자를 사용하는 것은 문자열 연결을 의미합니다. 예를 들어
길이
길이 속성 외에도 문자열은 호출할 수 있는 많은 메서드를 제공합니다.
JavaScript에서는 문자열이 수정되어 교체() 및 toUpperCase()와 같은 메서드가 새 문자열을 반환하며 원래 문자 자체는 변경되지 않습니다.
ECMAScript에서는 문자를 읽기 전용 배열로 처리할 수 있습니다. charAt() 메서드를 사용하는 것 외에도 대괄호를 사용하여 문자열의 개별 문자에 액세스할 수도 있습니다. (16비트 값)
Foxfire는 오래 전부터 이러한 방식으로 문자열 인덱싱을 지원해 왔으며 대부분의 최신 브라우저(IE 제외)는 Mozailla의 뒤를 이어 ECMAScript가 구체화되기 전에 이 기능을 완성했습니다.
iii 패턴 매칭
Javascript는 텍스트 패턴 일치를 나타내는 개체를 만드는 데 사용되는 RegExp() 생성자를 정의합니다. 이러한 패턴을 JavaScript Caiyang Perl의 정규식 구문인 "정규식"이라고 합니다. String 및 RegExp 개체는 모두 정규식을 사용하여 패턴 일치와 검색 및 교체를 위한 함수를 정의합니다.
RegExp 객체는 언어의 기본 데이터 유형이 아니며 Date와 마찬가지로 실용적인 API를 갖춘 특수 객체입니다. 정규식의 구문은 복잡하고 API는 풍부합니다. 10장에서 자세히 소개하겠습니다. RegExp는 강력하고 일반적으로 사용되는 텍스트 처리 도구입니다. 이는 단지 개요일 뿐입니다.
RegExp는 언어의 기본 데이터 유형은 아니지만 여전히 직접적인 작성 방법을 갖고 있으며 JavaScript에서 직접 사용할 수 있습니다. 두 슬래시 사이의 텍스트는 정규식의 리터럴을 형성합니다. 두 번째 슬래시 뒤에는 하나 이상의 문자가 올 수도 있습니다. 일치하는 패턴의 의미를 수정하는 데 사용됩니다. 예:
RegExp 개체는 많은 유용한 메서드를 정의하며 문자열에는 RegExp 매개 변수를 허용할 수 있는 메서드도 있습니다. 예:
3.부울 값
부울 값은 true 또는 false, on 또는 off를 나타냅니다. 이 유형에는 예약어 true 또는 false라는 두 가지 값만 있습니다.
JavaScript의 비교문 결과는 일반적으로 부울 값입니다. 예를 들어
a==4
이 코드는 변수 a의 값이 4인지 확인하는 데 사용됩니다. 같으면 값이 true이고, 그렇지 않으면 값이 false입니다
부울 값은 일반적으로 JavaScript의 if/else 문과 같은 JavaScript 제어 문에 사용됩니다. Boolean 값이 true이면 첫 번째 논리 조각을 실행하고, false이면 다른 코드 조각을 실행합니다. 예를 들어
모든 JavaScript 값은 부울 값으로 변환될 수 있습니다. 다음 값은 false로 변환됩니다.
모든 객체(배열)를 포함한 다른 모든 값은 true, false로 변환되며 false로 변환될 수 있는 위 6개의 값을 JavaScript에서 부울 값을 사용할 것으로 예상하는 경우 "false 값"이라고 부르기도 합니다. false 값은 false로 처리되고, true 값은 true로 처리됩니다
변수 o가 객체이거나 null이라는 점을 추가하면 if 문을 사용하여 o가 null이 아닌 값인지 감지할 수 있는 예를 살펴보겠습니다.
if(o!==null)...
불평등 연산자 "!=="는 o와 null을 비교하고 결과는 true 또는 false입니다. 먼저 여기서 비교 문을 무시할 수 있습니다. null은 false 값이고 개체는 true 값입니다.
만약(o)...
첫 번째 경우에는 o가 null이 아닌 한 if 뒤의 코드가 실행됩니다. 두 번째 경우의 제한은 그다지 엄격하지 않습니다. 이 if는 o가 false가 아니거나 false 값(예: null 또는 unfined)인 경우에만 실행됩니다.
Boolean에는 toString() 메서드가 포함되어 있으므로 이 메서드를 사용하여 문자열을 "true" 또는 "false"로 변환할 수 있지만 이 중요하지 않은 API 외에 세 가지 중요한 메서드가 포함되어 있지 않습니다. 부울 연산자.
&& 연산자, || 연산자 및 단항 연산자 "!"는 true 값이 false를 반환하는 경우
와 같이 false 값을 반환합니다.4.null 및 정의되지 않음
Null은 JavaScript 언어의 키워드로, "null 값"이라는 특수한 값을 나타냅니다. null의 경우 typeof() 연산이 수행되어 객체가 반환됩니다. 즉, null은 특수한 객체 값으로 간주될 수 있습니다. 이는 "비객체"를 의미합니다. 그러나 실제로 null은 일반적으로 자유 형식의 유일한 멤버로 간주됩니다. "가치 없는" 숫자, 문자열 및 개체를 나타낼 수 있습니다. 대부분의 프로그래밍 언어에는 JavaScript와 같은 null이 포함되어 있으며 null 또는 nil에 익숙할 수도 있습니다.
Javascript에는 값이 비어 있음을 나타내는 두 번째 값도 있습니다. 더 깊은 "널 값"을 나타내는 데 사용됩니다. 변수의 값입니다. 변수가 초기화되지 않았음을 나타냅니다. 객체 속성이나 배열 요소의 값을 쿼리하고 정의되지 않은 값을 반환하려는 경우 해당 속성이나 요소가 존재하지 않는다는 의미입니다. undetermined는 미리 정의된 전역 변수(null과 다르며 키워드가 아님)이며 해당 값은 undefine입니다. 정의되지 않은 유형을 테스트하기 위해 typeof를 사용하는 경우 "정의되지 않음"이 반환되어 이 값이 이 유형의 유일한 멤버임을 나타냅니다.
null과 undefine은 다르지만 둘 다 "가치의 공백"을 나타내며 종종 서로 바꿔 사용할 수 있습니다. 항등 연산자 "=="는 두 개가 동일한 것으로 간주합니다(두 항목을 구별하려면 엄격한 항등 연산자 "==="를 사용해야 합니다). 값이 부울 유형일 것으로 예상되는 경우 해당 값은 false입니다. 거짓과 비슷합니다. null 및 undefed에는 속성이나 메서드가 포함되어 있지 않습니다. 실제로 "." 및 "[]"를 사용하여 이 두 값의 멤버나 메서드에 액세스하면 유형 오류가 발생합니다.
정의되지 않음은 시스템 수준, 예상치 못한 또는 오류와 유사한 값 공석을 나타내고, null은 프로그램 수준, 정상 또는 예상 값 공석을 나타낸다고 생각할 수 있습니다. 변수나 속성을 복사하거나 함수에 다음과 같이 전달하세요. 매개변수의 경우 null이 최선의 선택입니다.
5. 전역 객체
이전 섹션에서는 JavaScript 요소 유형과 기본 값에 대해 논의했습니다. 객체 유형 - 객체, 배열 및 함수/그러나 지금 명확히 해야 할 매우 중요한 객체 클래스가 있습니다: 전역 객체
전역 개체는 JavaScript에서 중요한 역할을 합니다. 전역 객체의 속성은 전역적으로 정의된 기호입니다. JavaScript 프로그램을 직접 사용할 수 있습니다. JavaScript 인터프리터가 시작되면 새로운 전역 개체가 생성되고 정의된 초기 속성 집합이 제공됩니다.
정의되지 않은 Infinity 및 NaN과 같은 전역 속성
isNaN(), parseInt() 및 eval()과 같은 전역 함수
Date(), RegExp(), String(), Object() 및 Array()와 같은 생성자
Math 및 JSON과 같은 전역 개체
전역 객체의 초기 속성은 예약어가 아니지만 예약어로 취급되어야 합니다.
코드의 최상위 레벨 - 어떤 함수에도 속하지 않는 자바스크립트 코드에서는 javascript 키워드를 통해 전역 객체를 참조할 수 있습니다.
var global = this; //전역 객체를 참조하는 전역 변수를 정의합니다.
클라이언트 측 JavaScript에서 창 개체는 전역 개체로 작동합니다. 이 전역 창 개체는 자신에 대한 친숙한 창 참조를 대체하여 전역 핵심 속성을 정의합니다. 그러나 웹 브라우저와 대화형 JavaScript에 대한 다른 전역 속성도 정의합니다.
처음 생성될 때 전역 개체는 JavaScript에서 사전 정의된 모든 전역 값을 정의합니다. 이 특수 개체에는 프로그램에 대해 정의된 전역 값도 포함됩니다. 코드가 전역 변수를 선언하는 경우. 이 전역 변수는 전역 개체의 속성입니다.
6. 포장대상
JavaScript 개체는 복합 값입니다. 즉, 속성 또는 명명된 값의 모음입니다. 속성 값은 "."을 통해 참조됩니다. 속성 값이 함수인 경우 이는 메소드이며 객체 o의 메소드는 o.m()을 통해 전달됩니다.
문자열에도 속성과 메서드가 있다는 것을 알 수 있습니다.
문자열은 객체가 아닌데 속성을 갖는 이유는 무엇인가요? 문자열 s의 속성이 참조되는 한 JavaScript는 새 String(s)을 호출하여 문자열 값을 객체로 변환합니다. 이 객체는 문자열의 메서드를 상속합니다. 속성 참조를 처리하는 데 사용됩니다. 새 속성이 참조되면. 참조가 끝나면 새로 생성된 객체는 소멸됩니다. (이 임시 개체는 실제로 생성되거나 소멸되지 않지만 프로세스는 다음과 같습니다.)
문자열과 마찬가지로 숫자와 부울 값에도 고유한 메서드가 있어 Number() 및 Boolean() 생성자를 통해 임시 객체를 생성합니다. 이러한 메서드에 대한 호출은 모두 이 임시 개체에서 나옵니다. (null 및 정의되지 않음은 래핑된 객체가 아니며 해당 속성에 액세스하면 유형 오류가 발생합니다)
다음 코드를 보고 실행 과정을 생각해 보세요
이 코드가 실행되면 t의 값은 정의되지 않습니다. 코드의 두 번째 줄은 임시 문자열 객체를 생성하고 len의 값을 4로 지정한 다음 코드의 세 번째 줄은 수정되지 않은 원본을 사용합니다. ) ) 새 문자열 객체를 생성하고 len 속성을 읽으려고 시도합니다.
이 속성은 당연히 존재하지 않으며 결과가 정의되지 않음을 나타냅니다. 이 코드는 문자열, 배열, 불리언 값의 속성 값(또는 메소드)을 읽을 때 객체처럼 동작한다는 것을 보여줍니다. 해당 속성에 값을 할당해 보십시오. 이 작업은 무시됩니다. 수정은 임시 개체에서만 발생합니다. 이 임시 개체는 유지되지 않습니다.
String(), Number() 및 Boolean() 생성자를 통해 명시적으로 래퍼 객체를 생성할 수 있다는 점에 유의해야 합니다.
Javascript는 필요한 경우 래퍼를 기본 값으로 변환하므로 위 코드의 객체 S N B는 종종(항상 그런 것은 아님) s n b와 동일하게 동작합니다. "==" 같음 연산자는 원래 값을 변환하고 래핑됩니다. 객체는 동등하게 취급됩니다.
그러나 "===" 연산자는 이를 동일하지 않은 것으로 취급하고 typeof 연산자는 원래 값과 래핑하는 개체 간의 차이를 확인할 수 있습니다.
7. 불변의 기본 값과 변경 가능한 객체 참조.
Javascript의 기본 값(정의되지 않은 null 부울 값, 숫자 및 문자열)은 기본적으로 객체(배열 및 함수 포함)와 다릅니다. 기본 값은 변경할 수 없습니다. 이는 숫자와 부울 값의 경우 분명히 사실입니다. 숫자 자체의 값을 변경하는 것은 의미가 없지만 문자 배열처럼 보이는 문자열의 경우 덜 명확합니다. 문자열의 문자는 지정된 인덱스에 의해 수정될 수 있을 것으로 예상됩니다. 실제로 JavaScript에서는 이를 금지합니다. string의 모든 메서드는 수정된 문자열을 반환하는 것처럼 보이지만 실제로는 새 문자열을 반환합니다.
원래 값의 비교는 값이 동일한 경우에만 동일합니다. 숫자, 부울, Null 및 정의되지 않은 경우에는 약간 어려운 것처럼 들리며 이를 비교할 수 있는 다른 방법이 없습니다. 다시 말하지만, 문자열의 경우에는 덜 명확합니다. 두 개의 개별 문자열을 비교하는 경우 JavaScript는 각 인덱스의 길이와 문자가 동일한 경우에만 두 문자열을 동일하다고 간주합니다.
객체 비교는 값 비교가 아닙니다. 두 객체가 동일한 속성과 동일한 값을 포함하더라도 동일하지 않으며 정확히 동일한 인덱스 요소를 가진 두 배열은 동일하지 않습니다.
우리는 일반적으로 JavaScript의 기본 유형과 구별하기 위해 객체 참조 유형을 호출합니다. 용어에 따르면 개체는 참조이고 개체 비교는 동일한 기본 개체를 사용할 때만 동일합니다.
방금 위에서 본 코드와 마찬가지로 개체(또는 배열)를 변수에 할당하는 것은 단지 참조 값을 할당하는 것일 뿐 개체 자체는 한 번 복사되지 않습니다.
객체나 배열의 복사본을 얻으려면 객체의 모든 속성이나 배열의 모든 요소를 명시적으로 복사해야 합니다. 다음 예에서는 루프를 통해 배열 복사를 완료합니다.
마찬가지로 두 개인이나 배열을 비교하려면 속성이나 요소를 비교해야 합니다. 다음 코드는 배열을 비교하는 함수를 정의합니다.
8. 유형 변환
JavaScript의 값 유형은 매우 유연합니다. 우리는 이미 부울 값을 통해 이를 살펴보았습니다. JavaScript가 부울 값을 기대하는 경우 모든 유형의 값을 제공할 수 있습니다. JavaScript는 필요에 따라 유형 자체를 변환합니다. 일부 값(진리 값)은 true이고, 다른 값(false 값)은 false로 변환됩니다. 다른 유형에도 동일하게 적용됩니다. JavaScript가 문자열을 기대하는 경우 주어진 값을 문자열로 변환합니다. JavaScript에서 배열이 필요한 경우 주어진 값을 숫자로 변환합니다(변환 결과가 의미가 없으면 NaN을 반환함). 몇 가지 예는 다음과 같습니다.
다음 표는 JavaScript에서 유형 변환을 수행하는 방법을 설명합니다. 당신을 놀라게 할 유형을 굵은 글씨로 강조합니다. 빈 셀은 불필요하고 수행되지 않은 변환을 나타냅니다.
가치 | 문자열로 변환 | 번호 | 부울 값 | 객체 |
정의되지 않음 널 |
"정의되지 않음" "널" |
NaN 0 |
거짓 거짓 |
TypeError가 발생함 TypeError가 발생합니다 |
true false |
"ture" "false" |
1 0 |
new Boolean(true) new Boolean(false) |
|
""(空字符串) "1.2"(非空,数字) "one"(非空,非数字) |
0 1.2 NaN |
false 맞다 사실 |
새 문자열("") 새로운 문자열("1.2") 새로운 문자열("하나") |
|
0 -0 나N 인피니티 -인피니티 1(무한대, 0이 아님) |
"0" "0" "NaN" "인피니티" "-인피니티" "1" |
거짓 거짓 거짓 사실 사실 사실 |
새번호(0); 새 숫자(-0); 새로운 숫자(NaN) 뉴넘버(인피니티) 새로운 숫자(-무한대) 새번호(1) |
|
{}(모든 객체) [](임의 배열) [9](1개의 숫자 요소) ['a'](다른 배열) 기능(){}(임의의 기능) |
이 섹션의 세 번째 섹션을 참조하세요 "" "9" Join() 메소드 사용 이 섹션의 세 번째 섹션을 참조하세요 |
이 섹션의 세 번째 섹션을 참조하세요 0 9 나N 나N |
그렇습니다 사실 사실 사실 사실 |
위 표에 언급된 원래 값을 원래 값으로 변환하는 방법은 비교적 간단합니다. 이 문서의 세 번째 섹션에서 이미 부울 값으로 변환하는 방법을 논의했습니다. 모든 기본 값을 문자열로 변환하는 방법도 명확하게 정의되어 있습니다. 숫자로의 변환은 더 미묘합니다. 숫자로 표현된 문자열은 시작과 끝 부분에 공백을 허용하여 숫자로 직접 변환할 수 있습니다. 그러나 시작과 끝의 null이 아닌 문자는 숫자의 일부로 간주되지 않으므로 문자열 결과는 NaN이 됩니다. 이상하게 보이는 몇 가지 숫자 변환이 있습니다. true는 1로 변환되고, false는 빈 문자열 ""이 0으로 변환됩니다.
원시 값을 객체로 변환하는 것도 매우 간단하고 원시 값입니다.