자바스크립트. 데이터 유형 및 연산자. Javascript 데이터 유형은 변수 유형을 설정합니다.

변수는 일부 정보를 저장하고 검색할 수 있는 명명된 메모리 위치입니다.

변수 선언(생성)은 var 키워드를 사용하여 수행됩니다.

// 메시지 - 변수 이름 var message;

변수를 생성하면 즉시 값을 할당할 수 있습니다.

변수에 값을 할당하는 것은 "=" 연산자를 사용하여 수행됩니다.

// 예를 들어 변수 email을 생성하고 여기에 문자열 "을 할당합니다. [이메일 보호됨]"var 이메일 = " [이메일 보호됨]"; // email 변수를 새로운 값으로 설정 email = " [이메일 보호됨]";

변수의 값을 얻으려면 이름으로 간단히 참조하면 됩니다.

// 예를 들어 이메일 변수의 값을 브라우저 콘솔에 출력합니다. console.log(email);

단일 var 키워드를 사용하여 둘 이상의 변수를 선언하려면 쉼표를 사용해야 합니다.

Var 가격 = 78.55, 수량 = 10, 메시지;

JavaScript는 동적으로 또는 약한 유형의 언어입니다. 이는 변수가 선언될 때 허용할 수 있는 데이터 유형을 지정할 필요가 없음을 의미합니다. 따라서 먼저 한 데이터 유형의 값을 변수에 배치한 다음 다른 데이터 유형의 값을 배치할 수 있습니다.

Var 출력 = "성공"; // 변수에는 문자열 데이터 유형이 있습니다. 출력 = 28; // 동일한 변수이지만 이미 "숫자" 데이터 유형을 사용하고 있습니다. 출력 = true; // 동일한 변수이지만 이미 부울 값을 저장하고 있습니다.

변수의 값은 무제한으로 변경할 수 있습니다.

// age 변수가 생성됩니다. var age; // 변수 age에는 값 67이 할당됩니다. age = 67; // 변수 age는 "은퇴 연령"으로 설정됩니다. age = "은퇴 연령"; // 변수 age는 55로 설정됩니다. age = 55;

클라이언트 애플리케이션을 개발할 때 좋은 방법은 주어진 변수에 하나의 데이터 유형만 사용하는 것입니다. 변수에 다른 데이터 유형의 값을 쓰지 마십시오. 변수에 어떤 유형의 데이터가 있어야 하는지 이해하려면 변수를 생성할 때 즉시 특정 값으로 초기화하는 것이 좋습니다.

변수 이름은 문자, 숫자, $, _ 기호로 구성할 수 있습니다. 이 경우 변수의 첫 문자는 숫자가 아니어야 합니다. 또한 예약어를 변수 이름으로 사용할 수 없습니다.

// 두 개의 변수를 생성합니다. 첫 번째 변수의 이름은 Phone이고 두 번째 변수는 meassage입니다. var 전화, 메시지;

변수 이름의 문자 대소문자가 중요합니다. 즉, 예를 들어 변수 Phone과 Phone은 서로 다른 두 변수입니다.

엄격 모드를 사용하지 않는 경우 var 키워드 없이 초기 값으로 변수를 생성할 수 있습니다.

가격 = 250.00; // 변수를 생성하고 250.00% = "20%"라는 숫자로 초기화했습니다. // 변수를 생성하고 문자열 "20%"로 초기화했습니다.

그러나 이런 방식으로 변수를 생성하는 것은 권장되지 않습니다.

데이터 유형

JavaScript에서는 데이터 유형을 기본 유형과 객체 유형으로 나눌 수 있습니다.

기본 데이터 유형을 포함하는 변수는 해당 값을 명시적으로 저장합니다.

JavaScript에는 5가지 기본 데이터 유형이 있습니다.

  • 숫자;
  • 끈;
  • 부울 유형(부울);
  • 없는;
  • 한정되지 않은.

한 변수에 기본 데이터 유형을 포함하는 다른 변수의 값이 할당되면 해당 값의 자체 복사본을 받게 됩니다.

변수 x = 77, y = x; x = 55; 와이; // 77

객체를 포함하는 변수는 실제로 객체 자체를 저장하는 것이 아니라 객체에 대한 참조를 저장합니다.

한 변수에 개체(링크)를 포함하는 다른 변수의 값이 할당되면 개체에 대한 링크도 받게 됩니다. 이 작업의 결과로 이 두 변수에는 동일한 개체에 대한 참조가 포함됩니다.

// 예제 1(데이터 유형 "object" 사용) var coord1 = (x: 77, y: 100), coord2 = coord1; 코디1.x = 55; // 객체의 x 속성을 새로운 값 coord2.x로 설정합니다. // 55, 왜냐면 coord1 및 coord2에는 동일한 객체에 대한 참조가 포함되어 있습니다. // 예제 2(배열 데이터 유형 사용) var coord1 = , coord2 = coord1; 코디1 = 55; // 인덱스가 0인 요소를 새 값 coord2로 설정합니다. // 55, 왜냐면 coord1 및 coord2에는 동일한 객체에 대한 참조가 포함되어 있습니다. // 예제 3(데이터 유형 "date" 사용) var date1 = new Date(2018,00,01), date2 = date1; date2 = date2.setDate(date2.getDate()+7); // 날짜를 7일만큼 늘립니다. date1; // 2018년 1월 7일, 왜냐면 date1과 date2에는 동일한 객체에 대한 참조가 포함되어 있습니다.

숫자

JavaScript의 숫자 데이터 유형은 일반적입니다. 정수와 분수를 모두 나타내는 데 사용됩니다.

변수 int = 5; // 정수 var float = 5.98; // 분수

JavaScript에서 숫자를 표현하는 형식은 IEEE 754-2008 표준을 따릅니다.

JavaScript의 정수는 다음뿐만 아니라 지정할 수도 있습니다. 십진법숫자 체계뿐만 아니라 괄호 안에 표시된 접두사를 사용하여 8진수(0) 또는 16진수 체계(0x)로도 사용됩니다.

변수 정수 = 010; // 8 정수 = 055; // 45 int = 0xFF; //255 int = 0xB8; // 184

지수 형식으로 숫자를 쓸 수 있습니다.

변수 번호 = 2e3; // 숫자 2*10^3 (2000)의 지수 표기법 num = 2e-3; // 숫자 2*10^-3 (0.002)의 지수 표기법 num = 3.2e3; // 3200 숫자 = 1.5e-2; // 0.015

숫자 외에도 숫자 데이터 유형에는 특수 숫자 값도 포함됩니다.

  • 무한대(양의 무한대);
  • -무한대(음의 무한대);
  • NaN(숫자가 아님).

특수 값 Infinity는 매우 큰 양수를 의미합니다. 너무 커서 JavaScript로 표현할 수 없는 숫자입니다.

특별한 의미 - 무한대는 반대로 매우 큰 음수를 의미합니다. 숫자도 너무 커서 자바스크립트로 표현할 수 없는 숫자입니다.

계산 결과로 특수 숫자 값을 반환하는 표현식의 예:

5/0; // 무한 -5/0; // -무한대 Math.pow(10,399); // 무한대(10의 399승) Math.pow(10,399); // -무한대(-10의 399승)

NaN 값은 JavaScript가 계산할 수 없는 수학 연산을 수행한 결과로 반환됩니다.

5 - "안녕하세요"; // NaN (숫자 5에서 한 줄 빼기) 1000 / "20px"; // NaN(숫자를 문자열로 나눈 값) true * "1rem"; // NaN(부울 값 true에 문자열을 곱함)

매우 흥미로운 점은 JavaScript에서 NaN의 값이 자신을 포함한 어떤 것과도 동일하지 않다는 것입니다.

NaN == NaN; // 거짓 NaN === NaN; //거짓

부울 데이터 유형

부울(Boolean)은 true와 false라는 두 가지 값만 갖는 기본 데이터 유형입니다.

Var a = 참; var b = 거짓;

문자열은 JavaScript에서 텍스트를 나타내는 데 사용되는 데이터 유형입니다.

JavaScript 문자열은 0 또는 문자.

JavaScript는 항상 유니코드를 문자열 형식으로 사용합니다.

문자열(문자열 리터럴) 생성은 텍스트를 단일 또는 큰따옴표.

"자바스크립트"; "ECMA스크립트";

JavaScript에서는 작은따옴표와 큰따옴표 사이에 차이가 없습니다.

그러나 어떤 경우에는 큰따옴표보다는 작은따옴표를 사용하는 것이 합리적이고 그 반대의 경우도 마찬가지입니다.

예를 들어, 문자열에 큰따옴표가 포함되어 있으면 작은따옴표로 묶는 것이 더 편리합니다. 이렇게 하면 큰따옴표를 이스케이프 처리할 필요가 없어집니다.

""ECMA스크립트""; // 이스케이프하지 않고(작은따옴표 사용) "\"ECMAScript\""; // 탈출과 함께

JavaScript의 문자열에는 특수 문자가 포함될 수 있습니다. 예를 들어 \n(줄 바꿈), \t(탭), \r(캐리지 리턴) 등이 있습니다.

"이것은 문장입니다.\n그리고 이것도 문장이지만 새로운 줄에서 시작됩니다.";

문자열을 사용하면 더하기(결합), 즉 연결 작업을 수행할 수 있습니다. 이를 위해 "+" 연산자가 사용됩니다. 이 작업의 의미는 두 번째 줄을 첫 번째 줄 끝에 추가하는 것입니다.

"나는 " + "자바스크립트"를 좋아합니다; // 나는 자바스크립트를 좋아한다

값은 "정의되지 않음"입니다.

undefound 는 undefed 와 동일한 단일 값을 갖는 특별한 기본 데이터 유형입니다.

이 데이터 유형에는 아직 값이 할당되지 않은 선언된 변수가 있습니다.

변수 번호; // 한정되지 않은

객체의 존재하지 않는 속성에 액세스하는 경우에도 정의되지 않은 값이 반환됩니다.

Var obj = (); // 빈 객체 obj.prop; // 한정되지 않은

"널" 값

null은 null과 동일한 단일 값을 갖는 특별한 기본 데이터 유형입니다.

null은 "아무것도 없음" 또는 "알 수 없는 값"이라는 의미를 갖는 특별한 값입니다. 분명히 아무 의미도 없습니다.

물체

객체는 이름-값 쌍으로 구성된 데이터 구조입니다.

객체 리터럴 표기법을 사용하여 객체를 생성하는 방법은 다음과 같습니다.

( name_1: 값_1, name_2: 값_2, name_3: 값_3, ... )

보시다시피 콜론을 사용하여 이름과 값을 구분하고, 쌍은 쉼표를 사용하여 서로 구분합니다.

또한 쌍의 값이 함수인 경우 이를 이 객체의 메서드라고 합니다. 다른 모든 쌍, 즉 함수가 값으로 사용되지 않는 쌍을 객체 속성이라고 합니다.

즉, 객체는 속성과 메소드로 구성된 데이터 구조입니다.

Var person = ( 이름: "Vitaly", 나이: 27, getAge: function () ( return "Age: " + this.age; ) )

객체의 속성에 대한 액세스는 마침표나 대괄호 표기법을 사용하여 수행됩니다.

// 브라우저에 age 속성 값을 표시합니다. 콘솔 // 첫 번째 방법(점을 통해) console.log(person.age); // 방법 2(괄호 사용) console.log(person["age"]); // getAge 메소드를 호출합니다. 반환되는 값은 콘솔에 출력됩니다. console.log(person.getAge());

유형 연산자

typeof 연산자는 표현식의 데이터 유형에 대한 정보를 문자열로 얻는 데 사용됩니다.

typeof 연산자의 구문(괄호 없는 옵션):

표현 유형

연산자 구문 유형(괄호 사용):

유형(표현식)

변수 이름, 나이 = 37, 이메일 = " [이메일 보호됨]", isLicense = true, Interest: null, lastExperience: ( 기간: "2011년 6월 - 2018년 6월", 장소: "ISACA, 모스크바", 위치: "웹 디자이너" ), getExperience: function() ( return lastExperience.기간 + " ("+ lastExperience.position + " - " + lastExperience.place + ")"; ); 이름 유형; // "정의되지 않은" 연령 유형; // "숫자" 유형 of isLicense; // "부울" 관심 유형; / / "object" (1) typeof lastExperience; // "object" typeof getExperience; // "function" (2) /* (1)은 첫 번째 구현 이후 언어에 존재했던 버그입니다. 호환성을 유지하기 위해 고정되었으며 스크립트 작성 시 이를 고려해야 합니다. null은 기본 데이터 유형이고 객체가 아닙니다 */ /* (2) - typeof 연산자가 함수를 별도로 분리하는 것이 매우 편리합니다. JavaScipt의 함수도 객체입니다. 이는 다음 구성을 실행하여 쉽게 확인할 수 있습니다: */ typeof getExperience.__proto__.__proto__ // "object" (함수 프로토타입은 객체입니다)

상수

ECMAScript 6이 출시되면서 상수 생성이 가능해졌습니다. 이는 const 키워드를 사용하여 수행됩니다.

Const COLOR_RED = "#ff0000";

상수는 값이 변경되지 않도록 보호되는 변수입니다. 저것들. 값을 변경하려고 하면 오류가 발생합니다.

Const COLOR_RED = "#ff0000"; COLOR_RED = "#f44336"; // 잡히지 않은 TypeError: 상수 변수에 할당되었습니다.

예를 들어, 상수에 객체가 포함되어 있으면 해당 객체는 변경할 수 없으며 오히려 객체에 대한 참조입니다. 하지만 이 개체의 속성은 변경될 수 있습니다.

Const COLORS = ( 빨간색: "#ff0000", 녹색: "#00ff00", 파란색: "#00ff00" ) COLORS = ["#ff0000","#00ff00","#00ff00"]; // 잡히지 않은 TypeError: 상수 변수에 할당되었습니다. COLORS.green = "#4caf50";

데이터 유형은 프로그래밍 언어로 데이터 분류를 구축하는 데 도움이 됩니다. 예를 들어, 숫자와 문자열은 JavaScript가 다르게 처리하는 서로 다른 유형의 데이터입니다.

각 데이터 유형이 특정 값을 취하고 특정 작업을 수행할 수 있기 때문에 이는 중요합니다. JavaScript에서 변수에 대한 작업을 수행하려면 주어진 각 변수의 데이터 유형을 이해하는 것이 중요합니다.

이 튜토리얼에서는 JavaScript 데이터 유형을 소개합니다.

참고: 이 가이드의 정보는 완전한 것은 아니지만 기본 JavaScript 옵션에 대한 개요를 제공합니다.

동적 타이핑

자바스크립트는 동적 언어입니다. 이는 데이터 유형 검사가 컴파일 타임이 아닌 런타임에 수행됨을 의미합니다.

동적 언어에서는 동일한 이름의 변수를 사용하여 저장할 수 있습니다. 다른 유형데이터.

예를 들어, var 키워드로 정의된 변수 t는 다양한 유형의 데이터를 저장할 수 있습니다. 초기화할 수도 있지만 정의되지 않은 채로 둘 수도 있습니다.

변수 t = 16; // t는 숫자입니다
var t = "테레사"; // t는 문자열입니다
vart = 참; // t는 부울입니다.
var t; // t는 정의되지 않았습니다.

모든 t 변수에는 다양한 JavaScript 데이터 유형이 포함되어 있습니다. JavaScript에서는 변수를 사용하기 전에 변수의 데이터 유형을 명시적으로 지정할 필요가 없습니다.

숫자

JavaScript에는 정수와 부동 소수점 숫자를 구분하지 않는 단일 숫자 데이터 유형이 있습니다. 따라서 JavaScript의 숫자는 소수점 이하 자릿수를 사용하거나 사용하지 않고 작성할 수 있습니다.

var num1 = 93;
var num2 = 93.00;

위의 예에서는 두 변수 모두 쉼표 유무에 관계없이 숫자를 포함합니다.

JavaScript의 과학적 표기법을 사용하면 매우 크거나 작은 숫자를 축약할 수 있습니다.

var num3 = 987e8; // 98700000000
var num4 = 987e-8; // 0.00000987

JavaScript에서는 숫자가 15자리까지 정확한 것으로 간주됩니다. 즉, 16번째 숫자에 도달하면 숫자가 반올림됩니다.

변수 숫자5 = 999999999999999; // 999999999999999로 유지됩니다.
변수 숫자6 = 9999999999999999; // 10000000000000000으로 반올림됨

또한 JavaScript의 숫자에는 세 가지 상징적 의미가 있습니다.

인피니티 - 숫자 값, 이는 무한대에 가까운 양수입니다.

무한대(Infinity)는 무한대에 가까운 음수를 나타내는 숫자 값입니다.

NaN – Not-a-Number, 부동 소수점 숫자의 특수 상태입니다.

JavaScript에서 사용할 수 있는 최대 수를 초과하는 수를 셀 때 Infinity 및 -Infinity가 반환됩니다. 0으로 나누는 것과 같이 정의되지 않은 값을 계산할 때도 나타납니다.

var num7 = 5 / 0; // 무한대
var num8 = -5 / 0; // -무한대

기술적으로 숫자가 JavaScript의 상한선인 1.797693134862315E+308보다 크면 Infinity가 반환됩니다.

마찬가지로 숫자가 하한인 -1.797693134862316E+308을 초과하면 -Infinity가 표시됩니다.

무한대 숫자는 루프에서도 사용할 수 있습니다.

while (num9 != 무한대) (
// 여기의 코드는 num9 = Infinity를 통해 실행됩니다.
}

정의되지 않은 숫자의 경우 NaN이 인쇄됩니다. 숫자와 숫자가 아닌 값에 대해 수학 연산을 수행하려고 하면 NaN이 발생합니다. 예를 들어:

var x = 20 / "상어"; // x는 NaN이 됩니다.

20은 Shark 문자열로 나눌 수 없으므로 x 값은 NaN이 됩니다.

그러나 문자열을 숫자 값으로 평가할 수 있는 경우 JavaScript는 수학적 표현식을 평가합니다.

var y = 20 / "5"; // y는 4가 됩니다

JavaScript는 5를 숫자 값으로 처리할 수 있으므로 5는 수학 나눗셈 연산자와 함께 작동합니다.

표현식의 변수 하나가 NaN으로 설정되면 두 번째 피연산자가 숫자이더라도 결과는 NaN이 됩니다.

var a = NaN;
변수 b = 37;
var c = a + b; // c는 NaN이 될 것입니다

따라서 JavaScript에는 숫자 데이터 유형이 하나만 있습니다. JavaScript에서는 JavaScript가 동적 언어이기 때문에 숫자를 정수와 부동 소수점 숫자로 구분할 필요가 없습니다.

문자열

문자열은 하나 이상의 문자(문자, 숫자 및 기타 기호)의 시퀀스입니다. 문자열은 텍스트 데이터를 나타냅니다.

JavaScript에서는 문자열이 작은따옴표와 큰따옴표로 표시됩니다. 문자열을 생성하려면 일련의 문자를 따옴표로 묶어야 합니다.

var SingleQuotes = "작은따옴표로 묶인 문자열입니다.";
var doubleQuotes = "큰따옴표로 묶인 문자열입니다.";

작은따옴표나 큰따옴표를 사용할 수 있지만 동일한 코드 내에서는 한 가지 유형의 따옴표를 일관되게 사용해야 합니다.

프로그램 "Hello, World!" 컴퓨터 프로그래밍에서 문자열이 어떻게 사용되는지 보여줍니다. 본질적으로, 이 예에서는문자열은 "Hello, World!"라는 문구를 구성하는 일련의 문자입니다. 경고()에서.





함수 helloFunction() (
Alert("안녕하세요, 월드!");
}



클릭 해주세요



코드를 실행하고 Click me 버튼을 클릭하면 다음 텍스트가 포함된 팝업 창이 표시됩니다.

다른 데이터 유형과 마찬가지로 문자열도 변수에 저장할 수 있습니다.

var hw = "안녕하세요, 월드!";

그런 다음 변수를 호출하여 문자열을 표시할 수 있습니다.

...

var hw = "안녕하세요, 월드!";
함수 helloFunction() (
경고(hw);
}

...
안녕하세요, 월드!

문자열을 사용하면 정보를 사용자에게 전달하고 프로그램으로 다시 전달할 수 있습니다.

부울 데이터 유형

부울(또는 부울) 데이터 유형은 true와 false라는 두 가지 값으로 구성됩니다.

이 유형은 컴퓨터 과학의 논리 및 알고리즘과 관련된 진리값을 나타내는 데 사용됩니다.

참고: 이 데이터 유형은 수학자 George Boole의 이름을 따서 명명되었습니다.

수학의 많은 연산은 참 또는 거짓으로 평가될 수 있는 결과를 생성합니다.

이상:

  • 500 > 100 참
  • 1 > 5 거짓

미만:

  • 200 < 400 true
  • 4 < 2 false
  • 5 = 5 참
  • 500 = 400 거짓

다른 유형과 마찬가지로 부울 데이터 유형도 변수에 저장할 수 있습니다.

var myBool = 5 > 8; // 거짓

5는 8보다 크지 않으므로 myBool은 false입니다.

JavaScript로 코딩하면서 부울 데이터의 작동 방식과 다양한 진리 평가 함수 및 작업이 프로그램의 흐름을 어떻게 바꿀 수 있는지 익숙해지게 됩니다.

배열

배열은 단일 변수 내에 여러 값을 포함할 수 있습니다. 이는 배열 내부에 값 목록을 저장하고 이를 반복할 수 있음을 의미합니다.

배열 내의 각 값을 요소라고 합니다. 인덱스를 사용하여 배열 요소에 액세스할 수 있습니다.

배열은 대괄호로 정의됩니다.

문자열 배열은 다음과 같습니다.

var fish = ["상어", "갑오징어", "클라운피시", "장어"];

fish 변수를 호출하면 다음과 같은 결과를 얻을 수 있습니다.

["상어", "오징어", "클라운피시", "장어"]

배열은 변경 가능하기 때문에 매우 유연한 데이터 유형입니다. 요소의 값을 추가, 제거 및 변경할 수 있습니다.

사물

JavaScript의 객체는 키:값 쌍으로 구성됩니다.

객체 구문은 키:값 쌍으로 구성됩니다. 객체는 양쪽 중괄호(())로 구분됩니다.

객체의 쌍은 공백으로 구분됩니다.

var sammy = (firstName:"Wally", lastName:"Shark", color:"blue", location:"ocean");

객체는 여러 줄에 기록될 수도 있습니다(특히 대형 객체의 경우 그렇습니다).

var 월리 = (
이름: "월리",
성: "상어",
파란색",
위치: "바다"
};

여러 데이터 유형 작업

여러분이 만드는 모든 프로그램에는 여러 데이터 유형이 포함될 가능성이 높지만 작업은 일반적으로 단일 데이터 유형에 대해 수행됩니다. 수학은 숫자에 적용되고 슬라이싱은 문자열에 적용됩니다.

모든 유형의 데이터에 작동하는 연산자(예: + 연산자는 숫자를 추가하거나 문자열 연결을 수행할 수 있음)를 사용하면 예기치 않은 결과를 얻을 수 있습니다.

연결을 위한 변수를 생성하면 JavaScript는 각 요소를 문자열로 해석합니다.

var o = "바다" + 5 + 3;

변수 o를 호출하면 다음과 같은 결과를 얻을 수 있습니다.

그러나 문자열에 숫자가 먼저 포함되고 그 다음에 문자열이 포함되면 + 연산자는 더하기를 수행한 다음 연결을 수행합니다.

var p = 5 + 3 + "바다";
8바다

결과를 예측할 수 없기 때문에 단일 데이터 형식으로 작업과 메서드를 수행하는 것이 더 편리합니다. 그러나 JavaScript는 다른 프로그래밍 언어처럼 데이터 유형을 혼합할 때 오류를 반환하지 않습니다.

결론

이제 JavaScript 데이터 유형에 익숙해졌습니다. 여기에 나열된 각 유형은 JavaScript 프로그램을 작성할 때 중요합니다.

태그: 변수는 값이 할당된 식별자입니다. 변수는 프로그램에서 액세스할 수 있으므로 변수에 할당된 값으로 작업할 수 있습니다.

JavaScript 변수 자체에는 저장될 값 유형에 대한 정보가 포함되어 있지 않습니다. 즉, 예를 들어 변수에 문자열을 쓰면 나중에 변수에 숫자를 쓸 수 있습니다. 이러한 작업은 프로그램에 오류를 일으키지 않습니다. 이것이 JavaScript가 때때로 "형식화되지 않은" 언어라고 불리는 이유입니다.

변수를 사용하려면 먼저 var 또는 let 키워드를 사용하여 선언해야 합니다. 상수에 관해 이야기하는 경우 const 키워드가 사용됩니다. 이러한 키워드를 사용하지 않고도 변수를 선언하고 값을 할당할 수 있지만 그렇게 하지 않는 것이 좋습니다.

예어 var ES2015 표준 이전에는 var 키워드를 사용했습니다. 유일한 방법변수 선언.

변수 a = 0
이 구문에서 var를 생략하면 선언되지 않은 변수에 값이 할당됩니다. 이 작업의 결과는 프로그램이 실행되는 모드에 따라 달라집니다.

따라서 소위 엄격 모드가 활성화되면 오류가 발생합니다. 엄격 모드가 활성화되지 않은 경우 변수는 암시적으로 선언되어 전역 개체에 할당됩니다. 특히 이는 이러한 방식으로 함수에 암시적으로 선언된 변수가 함수가 완료된 후에도 계속 사용할 수 있음을 의미합니다. 일반적으로 함수에 선언된 변수는 해당 범위를 "넘어가지" 않습니다. 다음과 같습니다:

함수 notVar() ( bNotVar = 1 //이 작업을 수행하지 않는 것이 좋습니다) notVar() console.log(bNotVar)
1은 콘솔에 표시됩니다. 일반적으로 누구도 프로그램에서 이러한 동작을 기대하지 않습니다. bNotVar = 1이라는 표현은 변수를 선언하고 초기화하려는 시도처럼 보이지 않지만 외부 범위에 있는 변수에 액세스하려는 시도처럼 보입니다. 기능(이것은 매우 정상입니다). 결과적으로 암시적 변수 선언은 코드를 읽는 사람들에게 혼란을 주고 예상치 못한 프로그램 동작을 초래할 수 있습니다. 나중에 함수와 범위에 대해 모두 이야기하겠지만 지금은 표현식의 의미가 변수를 선언하는 것인 경우 항상 특수 키워드를 사용하도록 노력하십시오. 이 예에서 함수 본문이 var bNotVar = 1로 다시 작성된 경우 위 코드 조각을 실행하려고 하면 오류 메시지가 표시됩니다(브라우저 콘솔에서 볼 수 있음).

예를 들어 다음과 같이 표시될 수 있습니다. Uncaught ReferenceError: bNotVar is not Defined . 그 의미는 프로그램이 존재하지 않는 변수로 작업할 수 없다는 사실로 귀결됩니다. 예기치 않게 동작할 수 있는 이해할 수 없는 코드를 작성하는 것보다 프로그램을 처음 시작할 때 이러한 오류 메시지를 보는 것이 훨씬 낫습니다.

변수를 선언할 때 초기화되지 않거나 값이 할당되지 않은 경우 자동으로 정의되지 않은 값이 할당됩니다.

Var a //typeof a === "정의되지 않음"
var 키워드로 선언된 변수는 여러 번 다시 선언되어 새로운 값이 할당될 수 있습니다(그러나 이는 코드를 읽는 사람에게 혼란을 줄 수 있습니다).

변 a = 1 변 a = 2
하나의 표현식으로 여러 변수를 선언할 수 있습니다.

변수 a = 1, b = 2
변수의 범위는 해당 변수에 액세스할 수 있는(표시되는) 프로그램의 영역입니다.

함수 외부에서 var 키워드로 초기화된 변수는 전역 개체에 할당됩니다. 전역 범위를 가지며 프로그램의 어느 곳에서나 액세스할 수 있습니다. 함수 내에서 var 키워드를 사용하여 변수를 선언하면 해당 함수 내에서만 볼 수 있으며 해당 함수에 대한 지역 변수가 됩니다.

var를 사용하는 함수가 전역 범위의 변수와 이름이 동일한 변수를 선언하면 전역 변수가 "재정의"됩니다. 즉, 함수 내에서 이러한 변수에 액세스할 때 해당 변수의 로컬 버전이 사용됩니다.

블록(중괄호로 묶인 코드 영역)은 새 범위를 생성하지 않는다는 점을 이해하는 것이 중요합니다. 새로운 지역가시성은 함수가 호출될 때 생성됩니다. var 키워드에는 블록 범위가 아닌 기능 범위라는 것이 있습니다.

함수 코드에서 변수를 선언하면 함수 코드 전체에서 그 변수가 보입니다. 함수 코드 마지막에 var를 사용하여 변수를 선언하더라도 JavaScript에는 변수 호이스팅 메커니즘이 있으므로 코드 시작 부분에서 액세스할 수 있습니다. 이 메커니즘은 변수 선언을 "리프트"하지만 초기화 작업은 "리프트"하지 않습니다. 이는 혼란의 원인이 될 수 있으므로 함수 시작 부분에서 변수를 선언하는 습관을 들이십시오.

▍let 키워드 let 키워드는 ES2015에서 도입되었으며, 간단히 말해서 var의 "블록" 버전이라고 할 수 있습니다. let 키워드로 선언된 변수의 범위는 해당 변수가 선언된 블록, 문 또는 표현식과 중첩 블록으로 지정됩니다.

"let"이라는 단어 자체가 명확하지 않은 경우 "let"이라는 단어를 대신 사용하는 것을 상상할 수 있습니다. 그런 다음 let color = "red"라는 표현은 "let the color be red"와 같이 영어로 번역될 수 있고, "let the color be red"와 같이 러시아어로 번역될 수 있습니다.

let 키워드를 사용하면 var 키워드에 따른 모호성을 피할 수 있습니다. 예를 들어 let을 사용하여 동일한 변수를 두 번 선언할 수 없습니다. 루프를 초기화할 때 함수 외부에서 let을 사용하면 전역 변수가 생성되지 않습니다.

예를 들어 다음 코드는 오류를 생성합니다.

(나는 = 0이라고 하자; 나는< 5; i++) { console.log(i) } console.log(i)
루프가 초기화될 때 카운터 i가 var 키워드를 사용하여 선언되면 작업이 완료된 후 루프 외부에서 i를 사용할 수 있습니다.

요즘에는 최신 표준을 기반으로 JS 프로그램을 개발할 때 var를 완전히 버리고 let 및 const 키워드만 사용하는 것이 가능합니다.

▍const 키워드 var 또는 let 키워드를 사용하여 선언된 변수의 값을 덮어쓸 수 있습니다. 이러한 키워드 대신 const를 사용하면 해당 도움말로 선언되고 초기화된 상수에 새 값을 할당할 수 없습니다.

Const a = "테스트"
이 예에서는 상수 a에 새 값을 할당할 수 없습니다. 그러나 a가 숫자와 같은 기본 값이 아니고 객체인 경우 const 키워드를 사용하면 이 객체가 변경되는 것을 방지할 수 없다는 점에 유의해야 합니다.

객체가 변수에 저장된다고 말할 때 실제로 의미하는 것은 변수가 객체에 대한 참조를 저장한다는 것입니다. 이 링크는 변경할 수 없지만 링크가 연결되는 개체 자체는 변경할 수 있습니다.

const 키워드는 객체를 불변으로 만들지 않습니다. 이는 단순히 해당 상수에 기록된 참조를 변경으로부터 보호합니다. 다음과 같이 보입니다.

Const obj = () console.log(obj.a) obj.a = 1 //작동 console.log(obj.a) //obj = 5 //오류 발생
초기화 중에 새로운 빈 객체가 obj 상수에 기록됩니다. 존재하지 않는 속성 a에 액세스하려고 해도 오류가 발생하지 않습니다. 콘솔이 정의되지 않습니다. 그런 다음 객체에 새 속성을 추가하고 다시 액세스를 시도합니다. 이번에는 콘솔에서 이 속성의 값이 1입니다. 예제의 마지막 줄의 주석 처리를 제거하면 이 코드를 실행하려고 시도하면 오류가 발생합니다.

const 키워드는 let 과 매우 유사하며, 특히 블록 범위를 갖습니다.

현대적인 상황에서는 const 키워드를 사용하여 값을 변경할 계획이 없는 모든 엔터티를 선언하고 특별한 경우에만 허용하는 것이 허용됩니다. 왜? 요점은 프로그램을 복잡하게 하지 않고 오류를 피하기 위해 가능한 가장 간단한 구성을 사용하도록 노력하는 것이 가장 좋다는 것입니다.

JavaScript 데이터 유형은 때때로 "유형화되지 않은" 언어로 불리지만, 이는 사실이 아닙니다. 다양한 유형의 값을 변수에 쓸 수 있는 것은 사실이지만 JavaScript에는 여전히 데이터 유형이 있습니다. 특히 우리는 기본 및 객체 데이터 유형에 대해 이야기하고 있습니다.

값의 데이터 유형을 결정하려면 typeof 연산자를 사용할 수 있습니다. 피연산자의 유형을 나타내는 문자열을 반환합니다.

▍기본 데이터 유형 다음은 JavaScript 기본 데이터 유형 목록입니다.
  • 숫자
  • 부울(부울 값)
  • null(특수값 null)
  • 정의되지 않음(특수 값이 정의되지 않음)
  • 기호(특수한 경우에 사용되는 기호, ES6에 도입됨)
여기서 데이터 유형의 이름은 typeof 연산자에 의해 반환되는 대로 제공됩니다.

이 목록에서 가장 일반적으로 사용되는 데이터 유형에 대해 이야기해 보겠습니다.

숫자 유형 JavaScript에서 숫자 유형의 값은 64비트 배정밀도 부동 소수점 숫자로 표시됩니다.

코드에서 숫자 리터럴은 10진수 체계의 정수와 분수로 표시됩니다. 다른 방법을 사용하여 숫자를 쓸 수 있습니다. 예를 들어, 숫자 리터럴의 시작 부분에 접두사 0x가 있으면 16진수 표기법으로 작성된 숫자로 인식됩니다. 숫자는 지수 표기법으로 쓸 수도 있습니다(해당 숫자에서 문자 e를 찾을 수 있습니다).

다음은 정수 작성의 예입니다.

10 5354576767321 0xCC // 16진수
여기에 분수가 있습니다.

3.14 .1234 5.2e4 //5.2 * 10^4
숫자 리터럴(이 동작은 다른 기본 유형에서도 일반적임)을 객체로 액세스하려고 하면 작업 기간 동안 자동으로 "객체 래퍼"라고 하는 해당 객체로 변환됩니다. 이 경우 Number 객체 래퍼에 대해 이야기하고 있습니다.

예를 들어 숫자 리터럴이 포함된 변수 a에 액세스하려는 시도가 Google Chrome 콘솔의 개체로 표시되는 모습은 다음과 같습니다.

숫자 객체 래퍼 힌트

예를 들어, Number 유형 객체의 toString() 메서드를 사용하면 숫자의 문자열 표현이 반환됩니다. 해당 명령은 다음과 같으며 브라우저 콘솔(및 일반 코드)에서 다음과 같이 실행할 수 있습니다.

A.toString()
메서드 이름 뒤의 이중 괄호에 유의하세요. 이를 제공하지 않으면 시스템에서 오류가 생성되지 않지만 예상되는 출력 대신 숫자 5의 문자열 표현과 전혀 유사하지 않은 내용이 콘솔에 표시됩니다.

전역 Number 객체는 생성자로 사용될 수 있으며, 도움을 받아 새 숫자를 생성할 수 있습니다(그러나 이 형식에서는 거의 사용되지 않음). 또한 인스턴스(즉, 특정 숫자)를 생성하지 않고 독립 엔터티로 사용할 수도 있습니다. 도움으로 표현됩니다). 예를 들어 Number.MAX_VALUE 속성에는 JavaScript에서 표현할 수 있는 최대 숫자 값이 포함됩니다.

유형 문자열 유형 문자열의 값은 문자의 시퀀스입니다. 이러한 값은 작은따옴표 또는 큰따옴표로 묶인 문자열 리터럴로 지정됩니다.

"문자열" "다른 문자열"
문자열 값은 백슬래시 문자를 사용하여 여러 부분으로 나눌 수 있습니다.

"A\문자열"
이 줄에는 줄이 콘솔에 출력될 때 해석되는 소위 이스케이프 시퀀스가 ​​포함될 수 있습니다. 예를 들어, \n 시퀀스는 개행 문자를 의미합니다. 백슬래시 문자를 사용하여 동일한 따옴표로 묶인 문자열에 따옴표를 추가할 수도 있습니다. \를 사용하여 따옴표 문자를 이스케이프하면 시스템이 이를 특수 문자로 처리하지 않게 됩니다.

"나는 개발자다"
+ 연산자를 사용하여 문자열을 연결할 수 있습니다.

"A" + "문자열"

템플릿 리터럴 ES2015에서는 소위 템플릿 리터럴, 즉 템플릿 문자열이 등장했습니다. 이는 역따옴표(`)로 묶인 문자열이며 몇 가지 흥미로운 속성을 가지고 있습니다.

`문자열`
예를 들어 JavaScript 표현식을 평가한 결과인 특정 값을 템플릿 리터럴로 대체할 수 있습니다.

`$(something)이 포함된 문자열` `$(something+somethingElse)가 포함된 문자열` `$(obj.something())이 포함된 문자열`
역따옴표를 사용하면 여러 줄에 문자열 리터럴을 더 쉽게 작성할 수 있습니다.

`$(something)이 포함된 문자열`

부울 유형 JavaScript에는 부울 값으로 작업할 때 사용되는 예약어 쌍(true 및 false)이 있습니다. == , === 등의 비교 연산자< , >, true 또는 false 를 반환합니다.

부울 표현식은 if 및 while과 같은 문에서 프로그램의 흐름을 제어하는 ​​데 사용됩니다.

true 또는 false 값이 예상되는 경우 언어에 의해 자동으로 true(truth) 또는 false(falsy)로 평가되는 다른 값을 사용할 수 있다는 점에 유의해야 합니다.

특히 다음은 거짓 값입니다.

0 -0 NaN 정의되지 않음 null "" //빈 문자열
나머지 값은 true입니다.

null 유형 JavaScript에는 값이 없음을 나타내는 특수 값인 null 이 있습니다. 다른 언어에서도 유사한 값이 사용됩니다. undefed 유형 특정 변수에 undefine 값이 기록되면 해당 변수가 초기화되지 않았으며 이에 대한 값이 없음을 나타냅니다.

이 값은 return 키워드를 사용하여 결과가 명시적으로 반환되지 않은 함수에서 자동으로 반환됩니다. 함수가 호출될 때 지정되지 않은 매개변수를 사용하는 경우 해당 매개변수도 undefound 로 설정됩니다.

정의되지 않은 값을 확인하려면 다음 구성을 사용할 수 있습니다.

변수 유형 === "정의되지 않음"

▍객체 기본이 아닌 모든 값은 객체 유형입니다. 우리는 함수, 배열, "객체"라고 부르는 것 및 기타 여러 엔터티에 대해 이야기하고 있습니다. 이러한 모든 데이터 유형은 객체 유형을 기반으로 하며 여러 면에서 서로 다르지만 공통점도 많습니다. 표현식 표현식은 수행된 계산을 기반으로 특정 값을 처리하고 얻을 수 있는 코드 조각입니다. . JavaScript에는 여러 범주의 표현식이 있습니다. 산술 표현식 이 범주에는 숫자로 평가되는 표현식이 포함됩니다.

1 / 2 나는++ 나는 -= 2 나는 * 2

문자열 표현식 이러한 표현식을 평가한 결과는 문자열입니다.

"A " + "문자열" "A " += "문자열"

기본 표현식 리터럴, 상수 및 식별자에 대한 참조가 이 범주에 속합니다.

2 0.02 "something" true false this //실행 컨텍스트, 현재 객체에 대한 참조 정의되지 않음 i //여기서 i는 변수 또는 상수입니다.
여기에는 일부 JavaScript 키워드 및 구문도 포함됩니다.

함수 클래스 function* //yield 제너레이터 //제너레이터를 일시 중지/재개하는 명령 항복* //다른 반복자 또는 제너레이터에 위임 비동기 함수* //비동기 함수 표현 wait //비동기 함수 실행을 기다리는 구성 /pattern /나 // 정규식() //그룹화

배열 및 객체에 대한 초기화 식 //array literal () //object literal (a: 1, b: 2) (a: (b: 1)) 논리식 논리식 사용 논리 연산자, 계산 결과는 논리값입니다.

A && b a || b!a

속성 액세스 표현식 이러한 표현식을 사용하면 객체의 속성과 메서드에 액세스할 수 있습니다.

Object.property //객체의 속성(또는 메서드) 호출 object object["property"]

객체 생성 표현식 new object() new a(1) new MyRectangle("name", 2, (a: 4)) 함수 선언 표현식 function() () function(a, b) ( return a * b ) (a, b) => a * b a => a * 2 () => ( return 2 ) 표현식 호출 이러한 표현식은 객체의 함수나 메소드를 호출하는 데 사용됩니다.

A.x(2) window.resize()

객체 작업 우리는 이미 위에서 객체를 접하고 객체 리터럴에 대해 이야기하고 메소드를 호출하고 속성에 액세스했습니다. 여기서는 객체에 대해 좀 더 자세히 이야기하겠습니다. 특히 프로토타입 상속의 메커니즘과 클래스 키워드의 사용을 살펴보겠습니다.▍프로토타입 상속 JavaScript는 프로토타입 상속을 지원한다는 점에서 현대 프로그래밍 언어 중에서 가장 두드러집니다. . 대부분의 객체지향 언어는 클래스 기반 상속 모델을 사용합니다.

모든 JavaScript 개체에는 프로토타입인 다른 개체를 가리키는 특별한 속성(__proto__)이 있습니다. 객체는 프로토타입의 속성과 메서드를 상속합니다.

객체 리터럴을 사용하여 생성된 객체가 있다고 가정해 보겠습니다.

Const 자동차 = ()
또는 Object 생성자를 사용하여 객체를 만들었습니다.

Const 자동차 = 새 객체()
어떤 경우든 자동차 객체의 프로토타입은 Object.prototype 입니다.

객체이기도 한 배열을 생성하는 경우 해당 프로토타입은 Array.prototype 객체가 됩니다.

Const list = //또는 const list = new Array()
다음과 같이 확인할 수 있습니다.

Car.__proto__ == Object.prototype //true car.__proto__ == new Object().__proto__ //true list.__proto__ == Object.prototype //false list.__proto__ == Array.prototype //true list.__proto__ == new Array().__proto__ //참
여기서는 __proto__ 속성을 사용했는데, 개발자가 이를 사용할 필요는 없지만 일반적으로 액세스할 수 있습니다. 더 많은 점에 유의해야합니다. 믿을 수 있는 방법으로객체의 프로토타입을 얻으려면 전역 getPrototypeOf() 메서드를 사용하는 것입니다. 물체.

Object.getPrototypeOf(새 객체())
프로토타입의 모든 속성과 메서드는 해당 프로토타입이 있는 개체에서 사용할 수 있습니다. 예를 들어, 배열의 목록은 다음과 같습니다.


배열 힌트

모든 객체의 기본 프로토타입은 Object.prototype입니다.

Array.prototype.__proto__ == Object.prototype
Object.prototype에는 프로토타입이 없습니다.

위에서 본 것은 프로토타입 체인의 예입니다.

개체의 속성이나 메서드에 액세스하려고 할 때 개체 자체에 해당 속성이나 메서드가 없으면 검색이 해당 프로토타입에서 수행된 다음 프로토타입의 프로토타입에서 수행되는 방식으로 원하는 속성을 찾을 때까지 수행됩니다. 또는 프로토타입 체인이 끝나지 않을 때까지.

new 연산자와 객체 또는 배열 리터럴을 사용하여 객체를 생성하는 것 외에도 Object.create() 메서드를 사용하여 객체의 인스턴스를 생성할 수 있습니다. 이 메소드에 전달된 첫 번째 인수는 생성된 객체의 프로토타입이 될 객체입니다.

Const 자동차 = Object.create(Object.prototype)
isPrototypeOf() 메소드를 사용하여 객체가 다른 객체의 프로토타입 체인의 일부인지 확인할 수 있습니다.

상수 목록 = Array.prototype.isPrototypeOf(목록)

생성자 함수 위에서 우리는 언어에서 이미 사용 가능한 생성자 함수를 사용하여 새 개체를 만들었습니다(이를 호출할 때 키워드 new가 사용됨). 이러한 기능을 직접 만들 수 있습니다. 예를 살펴보겠습니다.

함수 Person(name) ( this.name = name ) Person.prototype.hello = function() ( console.log(this.name) ) let person = new Person("Flavio") person.hello() console.log( Person.prototype.isPrototypeOf(사람))
여기서는 생성자 함수를 만듭니다. 호출하면 생성됨 새로운 객체, 이는 키로 표시됩니다. 이 단어생성자의 본문에 있습니다. 이 객체에 이름 속성을 추가하고 생성자에 전달된 내용을 기록합니다. 이 객체는 생성자에서 자동으로 반환됩니다. 생성자 함수를 사용하면 이름 속성에 생성 시 생성자에 전달된 내용이 포함되는 많은 객체를 생성할 수 있습니다.

생성자를 생성한 후 이 함수를 사용하여 생성된 객체의 name 속성 값을 콘솔에 인쇄하는 함수를 프로토타입에 추가합니다. 이 생성자를 사용하여 생성된 모든 객체는 동일한 프로토타입을 가지므로 동일한 hello() 함수를 사용합니다. 이는 Person 유형의 다른 객체를 생성하고 해당 hello() 함수를 예제에 이미 존재하는 객체의 함수와 비교하여 쉽게 확인할 수 있습니다(이 경우 함수 이름은 괄호 없이 작성됩니다).

▍클래스 ES6 표준에서 JavaScript는 "클래스"라는 개념을 도입했습니다.

이전에 JavaScript는 위에서 설명한 프로토타입 상속 메커니즘만 사용할 수 있었습니다. 이 메커니즘은 다른 언어에서 JS로 넘어온 프로그래머에게는 이상해 보였습니다. 따라서 클래스는 본질적으로 프로토타입 상속 메커니즘의 "구문적 설탕"인 언어로 나타났습니다. 즉, 생성된 객체는 전통적인 방식, 클래스를 사용하여 생성된 객체에는 프로토타입이 있습니다.

클래스 선언 클래스 선언은 다음과 같습니다.

클래스 Person ( constructor(name) ( this.name = name ) hello() ( return "안녕하세요, 저는 " + this.name + "." ) )
클래스에는 new ClassIdentifier() 구성을 사용하여 새 개체를 만드는 데 사용할 수 있는 식별자가 있습니다.

새 객체가 생성되면 생성자 메서드가 호출되고 매개변수가 전달됩니다.

클래스에서 메서드를 선언할 수 있습니다. 우리의 경우 hello()는 클래스를 기반으로 생성된 모든 객체에서 호출할 수 있는 메서드입니다. Person 클래스를 사용하여 새 객체를 생성하는 모습은 다음과 같습니다.

Const flavio = 새로운 사람("Flavio") flavio.hello()

클래스 기반 상속 클래스는 다른 클래스를 확장할 수 있습니다. 이러한 클래스에서 생성된 개체는 원래 클래스의 메서드와 확장 클래스에 지정된 메서드를 모두 상속합니다.

다른 클래스(해당 클래스의 하위 클래스)를 확장하는 클래스에 상위 클래스와 이름이 같은 메서드가 있는 경우 해당 메서드가 원래 메서드보다 우선합니다.

클래스 프로그래머는 Person을 확장합니다( hello() ( return super.hello() + " 나는 프로그래머입니다." ) ) const flavio = new Programmer("Flavio") flavio.hello()
위 예제에서 hello() 메서드를 호출하면 Hello, I am Flavio라는 문자열이 반환됩니다. 나는 프로그래머입니다.

클래스는 변수(속성)의 존재를 제공하지 않으며, 클래스를 사용하여 생성된 객체의 속성은 생성자에서 구성되어야 합니다.

클래스 내에서 super 키워드를 사용하여 상위 클래스에 액세스할 수 있습니다.

정적 메서드 클래스에 설명된 메서드는 클래스에서 생성된 객체에 액세스하여 호출할 수 있지만 클래스 자체에 액세스해서는 호출할 수 없습니다. 정적 메서드는 클래스에 직접 액세스하여 호출할 수 있습니다. 개인 메서드 JavaScript에는 개인 메서드를 선언할 수 있는 내장 메커니즘이 없습니다. 예를 들어 클로저를 사용하면 이 제한을 극복할 수 있습니다.Getter 및 setter get 또는 set 키워드를 접두어로 붙여 클래스의 메서드를 정의할 수 있습니다. 이를 통해 소위 getter 및 setter(클래스를 기반으로 생성된 개체의 속성에 대한 액세스를 제어하는 ​​데 사용되는 함수)를 만들 수 있습니다. getter는 의사 속성의 값을 읽으려고 할 때 호출되고, setter는 새 값을 쓰려고 할 때 호출됩니다.

클래스 Person ( 생성자(이름) ( this.userName = 이름 ) set 이름(값) ( ​​this.userName = value ) get name() ( return this.userName ) )

요약 이 자료에서 우리는 JavaScript의 변수, 데이터 유형, 표현식 및 객체 작업에 대해 이야기했습니다. 다음 자료의 주제는 함수입니다.

친애하는 독자 여러분! 오랫동안 JS로 글을 써오셨다면 해당 언어에서 class 키워드가 등장하는 것에 대해 어떻게 생각하시는지 말씀해 주세요.

이 튜토리얼에서는 매우 중요한 개념인 JavaScript 데이터 유형을 소개합니다. 이 개념에 세심한 주의를 기울이는 것이 좋습니다. 처음부터 이 개념을 이해하지 못하면 만든 프로그램의 이상한 동작을 처리해야 하는 경우가 많습니다.

동적 타이핑

진행 중 컴퓨터 프로그램각각은 프로그래밍 언어로 처리될 수 있고 특정 데이터 유형에 속하는 다양한 값을 조작합니다.

JavaScript에서 데이터 유형은 단순(기본이라고도 함) 유형과 복합(참조 또는 객체라고도 함)이라는 두 가지 범주로 나눌 수 있습니다.

JavaScript는 프로그램 실행 중에 데이터 유형을 즉시 정의, 구문 분석 및 컴파일할 수 있는 약한 유형 또는 동적 프로그래밍 언어입니다. 즉, 변수 유형을 미리 정의할 필요가 없습니다. 유형은 프로그램 실행 중에 자동으로 결정됩니다.
따라서 프로그램의 다른 부분에서 동일한 변수가 다른 유형의 값을 가질 수 있습니다.

데이터 유형

ECMAScript® 표준은 다음 데이터 유형을 정의합니다.

  • 단순(기본이라고도 함) 유형:
    • 부울(Boolean) - 두 가지 가능한 값(때때로 true 및 false라고도 함)을 취할 수 있습니다.
    • null – null 값은 일반적으로 의도적으로 존재하지 않거나 잘못된 개체나 주소를 가리키는 참조를 나타냅니다.
    • 정의되지 않음 - 정의되지 않은 값으로 초기화된 미리 정의된 전역 변수를 나타냅니다.
    • 숫자(영어 숫자) – 64비트 배정밀도 부동 소수점 숫자 형식의 숫자 데이터 유형입니다.
    • 문자열(영어 문자열) – 텍스트를 나타내는 데 사용되는 일련의 문자입니다.
    • 기호 (eng. 기호)는 데이터 유형으로, 그 인스턴스는 고유하고 불변입니다. (ECMAScript 6의 새로운 기능)
  • 객체는 일반적으로 객체의 속성이라고 불리는 명명된 값의 모음입니다.
기본 유형과 복합 유형의 차이점

각 데이터 유형을 살펴보기 전에 먼저 typeof 연산자에 대해 알아봅시다. typeof 연산자는 변수의 데이터 유형을 설명하는 문자열을 반환합니다.
다음 예제를 사용하여 어떻게 작동하는지 살펴보겠습니다.

예제 스크립트는 변수를 선언하고 초기화(값 할당)한 다음 각 변수의 유형을 인쇄합니다.

기본 데이터 유형과 복합 데이터 유형의 차이는 해당 값이 복사될 때 발생합니다.

변수에 단순 유형의 값이 할당되면 값 자체(예: 숫자)가 변수에 기록됩니다. 단순 유형의 변수를 다른 변수에 할당하면 값이 복사됩니다. 결과적으로 각 변수는 고유한 값을 가지며 변수 중 하나의 변경 사항은 다른 변수의 값에 어떤 식으로든 영향을 미치지 않습니다.

복합(참조) 유형의 값을 변수에 할당하면 해당 값에 대한 참조(객체에 대한 참조)가 변수에 기록됩니다. 하나의 변수(값에 복합 값에 대한 참조가 포함됨)를 다른 변수에 할당하면 복합 값에 대한 참조가 복사됩니다. 결과적으로 두 변수는 모두 동일한 합성 값을 참조하며 한 변수 값의 변경은 다른 변수에 영향을 미칩니다.

기본 유형

객체를 제외한 JavaScript의 모든 데이터 유형은 불변이거나 불변입니다. 즉, 해당 값은 수정할 수 없으며 다른 새 값으로 덮어쓰기만 하면 됩니다. 예를 들어 문자열은 문자별로 조정할 수 없으며 완전히 다시 작성할 수만 있습니다. 이러한 유형의 값을 "원시"라고 합니다.

프로그램이 작동할 수 있는 가장 간단한 데이터를 리터럴이라고 합니다. 리터럴은 JavaScript에서 값을 나타내는 데 사용되는 숫자 또는 문자열입니다. 제공되는 정보는 매우 다양할 수 있으므로 의미도 다양합니다. 다양한 방식. JavaScript에서 가장 간단한 데이터 유형은 기본 데이터 유형(숫자, 문자열, 부울)이라고 합니다. 그들 모두는 "원시적"으로 분류됩니다.

부울(논리) 유형 "부울"

논리 또는 부울 값(발명자 이름 뒤 - 부울)은 true(true) 또는 false(false)의 두 값 중 하나만 가질 수 있습니다. 값은 참또는 false는 일반적으로 비교나 논리 연산에 나타납니다.

다음 프로그램은 부울 변수를 생성한 다음 if/else 문을 사용하여 해당 값을 테스트합니다.

어떤 표현이든 비교 표현으로 사용할 수 있습니다. 0, null, 정의되지 않음 또는 빈 문자열을 반환하는 모든 표현식은 false 로 해석됩니다. 다른 값을 지정하는 표현식은 true 로 해석됩니다.

참고: 부울 값을 작성할 때 따옴표로 묶지 않습니다. var myVar = true;
동시에 var myVar = "true"를 선언하면 문자열 변수가 생성됩니다.

숫자 데이터 유형

JavaScript에서는 정수와 부동 소수점 숫자 사이에 구분이 없습니다. 기본적으로 JavaScript는 모든 숫자를 부동 소수점 값으로 나타냅니다.

JavaScript는 IEEE-754 표준에 정의된 64비트 형식을 사용하여 숫자를 나타냅니다. 이 형식은 ±1.7976931348623157 × 10308 ~ ±5 × 10 -324 범위의 숫자를 표현할 수 있습니다.

프로그램 코드에서 직접 발견되는 숫자를 숫자 리터럴이라고 합니다. JavaScript는 10진수 정수 리터럴 외에도 16진수 값을 인식합니다.
16진수 숫자에는 0부터 9까지의 숫자 시퀀스와 a부터 f까지의 문자가 포함될 수 있으며 문자 시퀀스 "0x"로 시작해야 합니다.

변수 a = 255; var b = 0xFF; // 16진수 표기법으로 숫자 255

또한 JavaScript에는 특수 숫자 값이 포함되어 있습니다.

  • NaN(숫자 또는 계산 오류가 아님). 문자열이나 정의되지 않은 값과 같은 유효하지 않은 데이터에 대한 잘못된 수학 연산의 결과입니다.
  • 무한대(양의 무한대). 양수가 너무 커서 JavaScript로 표현할 수 없을 때 사용됩니다.
  • -무한대(음의 무한대). 음수가 너무 커서 JavaScript로 표현할 수 없을 때 사용됩니다.
  • ±0(양수 및 음수 0). JavaScript는 양의 0과 음의 0을 구별합니다.
문자열 데이터 유형

문자열 유형은 각각 유니코드 문자(문자, 숫자, 구두점, 특수 문자 및 공백)를 나타내는 불변의 순서가 지정된 16비트 값 시퀀스입니다. 줄은 비어 있거나 하나 이상의 문자로 구성될 수 있습니다. 문자열은 큰따옴표(") 또는 작은따옴표(")를 사용하여 생성됩니다. 작은따옴표 쌍으로 구분된 문자열은 큰따옴표를 사용할 수 있으며, 반대로 큰따옴표 쌍으로 묶인 문자열 내에서는 작은따옴표를 사용할 수 있습니다.

JavaScript에서는 큰따옴표와 작은따옴표 사이에 차이가 없지만 문자열의 시작과 끝 부분에 있는 따옴표는 달라서는 안 됩니다. 예를 들어, 다음과 같은 표현식은 구문 오류를 발생시킵니다.

var firstName = "최대"; //구문 오류 - 다른 따옴표

참고: JavaScript에는 C, C++ 및 Java의 char과 같은 특별한 단일 문자 데이터 유형이 없습니다. 단일 문자는 단위 길이의 문자열로 표시됩니다.

Null 데이터 유형 Null 유형에는 단일 특수 값(null)이 포함됩니다.

null 키워드는 함수 이름이나 변수 이름으로 사용할 수 없습니다. null 값은 "빈" 개체에 대한 참조이며 특별한 목적을 가지고 있습니다. 일반적으로 나중에 값이 할당될 변수를 초기화하는 데 사용됩니다.

null 값에 대한 typeof 연산자는 문자열 "object"를 반환하며, 이는 null 값이 특별한 "빈" 개체임을 나타냅니다.

정의되지 않은 데이터 유형

정의되지 않은 유형은 고유한 유형을 형성하며, 이는 하나의 특수 값인 정의되지 않음을 포함합니다. 다음은 var 연산자를 사용하여 선언되었지만 초기화되지 않은 변수의 값입니다.

값이 할당된 적이 없는 변수, 존재하지 않는 개체 속성 또는 배열 요소에 액세스할 때 undefound 값이 반환됩니다.

정의되지 않은 값을 가진 변수는 전혀 정의되지 않은 변수와 다르다는 점에 유의해야 합니다.

이 예에서 Alert() 메소드는 정의되지 않은 age 변수의 값을 표시합니다. 두 번째 경우에는 선언되지 않은 자동차 변수가 경고() 메서드에 전달되어 오류가 발생합니다.

다음 예제는 초보 프로그래머에게 다소 혼란스러울 수 있습니다. 왜냐하면... typeof 연산자는 초기화되지 않은 변수와 선언되지 않은 변수 모두에 대해 정의되지 않은 값을 반환합니다.

위의 예에서는 age 변수가 선언되었지만 아무 것도 기록되지 않았으므로 해당 값은 undefine 입니다. car 변수는 선언되지 않았습니다. 실제로 존재하지 않습니다. 그러나 typeof는 두 경우 모두 정의되지 않은 문자열을 반환합니다. 물론 이는 기술적으로는 완전히 다르지만 이러한 변수를 사용하여 작업을 수행하는 것이 불가능하기 때문에 어느 정도 의미가 있습니다.

참고: 선언된 변수는 항상 초기화하는 것이 좋습니다. 이 경우 변수가 초기화되지 않았기 때문이 아니라 변수가 선언되지 않았기 때문에 typeof 연산자가 정의되지 않음을 반환한다는 것을 알 수 있습니다.

정의되지 않은 값은 null 에서 파생되므로 ECMA-262에서 == 등가 연산자는 두 값을 동일하게 처리합니다.

null과 정의되지 않음은 서로 관련되어 있지만 다르게 사용됩니다. 정의되지 않은 값을 변수에 명시적으로 할당하면 안 되지만 null에는 적용되지 않습니다. 필요한 개체를 사용할 수 없는 경우 대신 null을 사용해야 합니다. 이는 null이 빈 개체에 대한 포인터로 도입되었음을 의미하며 undefine과의 차이점을 강조합니다.

프로그램에서 null과 정의되지 않음을 구별하려면 항등 연산자 ===를 사용할 수 있습니다.

데이터 유형 기호

기호는 ECMAScript 버전 6 이후 JavaScript에 새로 추가된 것입니다. 기호는 고유 식별자를 생성하는 데 사용되는 고유하고 변경할 수 없는 기본 값입니다.

기호를 만들려면 기호 함수를 호출해야 합니다.

var mySymbol = 기호();

기호를 정의하려면 typeof 연산자를 사용할 수 있습니다. 값이 기호이면 문자열 기호가 반환됩니다.

Symbol 함수에는 선택적 매개변수(기호를 설명하는 문자열)가 있습니다.

속성 이름은 문자열이므로 문자열을 값과 연결하는 객체를 고려할 수 있습니다. 이러한 정보 조각은 함께 키-값 쌍을 형성합니다.

안에 자바스크립트 객체다음 두 구문 중 하나를 사용하여 생성할 수 있습니다.

1. var obj = (); // 객체 리터럴 사용 2. var obj = new Object(); // 생성자라는 메서드를 사용하여

객체 리터럴을 사용하여 객체를 생성하는 작업은 일반 변수를 정의하는 것부터 시작됩니다. 이 명령문의 오른쪽에는 객체 리터럴이 기록됩니다. 이는 중괄호()로 묶인 쉼표로 구분된 쌍 목록입니다. "이름-값", 중괄호로 묶입니다. 속성 이름과 값은 콜론으로 구분됩니다.

var cat = ( "다리": 4, "이름": "Murzik", "color": "빨간색" )

객체를 생성하는 두 번째 방법은 Object() 생성자를 사용하는 것입니다. 이 경우 new Object() 표현식이 먼저 사용된 다음 결과 객체의 속성이 정의되고 초기화됩니다.

  • 하나의 변수(값에 복합 값에 대한 참조가 포함됨)를 다른 변수에 할당하면 복합 값에 대한 참조가 복사됩니다. 결과적으로 두 변수는 모두 동일한 합성 값을 참조하며 한 변수 값의 변경은 다른 변수에 영향을 미칩니다.
  • 0, null, 정의되지 않음 또는 빈 문자열을 반환하는 모든 표현식은 false 로 해석됩니다.
  • 문자열은 큰따옴표(") 또는 작은따옴표(")를 사용하여 생성됩니다. 작은따옴표 쌍으로 구분된 문자열에는 큰따옴표를 사용할 수 있으며, 그 반대로 큰따옴표 쌍으로 묶인 문자열에는 작은따옴표를 사용할 수 있습니다.
  • null 값은 "빈" 개체에 대한 참조이며 특별한 목적을 가지고 있습니다. 일반적으로 나중에 값이 할당될 변수를 초기화하는 데 사용됩니다.
  • (정의되지 않은) 값은 var 연산자를 사용하여 선언되었지만 초기화되지 않은 변수입니다.
  • JavaScript에서는 다음 두 가지 방법 중 하나로 객체를 만들 수 있습니다.
    • 객체 리터럴 사용
    • 생성자라는 메소드를 사용하여
  • 객체에는 순서가 지정되지 않은 속성 컬렉션이 포함되어 있으며 각 속성에는 이름과 값이 포함되어 있습니다. 언제든지 개체에 새로운 명명된 값을 추가하거나 기존 값을 제거할 수 있습니다.