>  기사  >  웹 프론트엔드  >  js 데이터 유형에 대한 자세한 설명

js 데이터 유형에 대한 자세한 설명

小云云
小云云원래의
2018-03-22 17:22:511236검색

ES5 단순 데이터 유형(기본 데이터 유형이라고도 함): 정의되지 않음, Null, 부울, 숫자 및 문자열. 복잡한 데이터 유형인 Object도 있습니다. Object는 기본적으로 순서가 지정되지 않은 이름-값 쌍 세트로 구성됩니다. ECMAScript는 사용자 정의 유형을 생성하는 메커니즘을 지원하지 않으며 모든 값은 위에서 언급한 6가지 데이터 유형 중 하나가 됩니다.

1. typeof 연산자 - 주어진 변수의 데이터 유형을 감지합니다.
값에 typeof 연산자를 사용하면 다음 문자열 중 하나가 반환될 수 있습니다.
"정의되지 않음" - 값이 정의되지 않은 경우
"부울" - 값이 있는 경우 부울입니다.
"문자열" - 값이 문자열인 경우
"숫자" - 값이 숫자 값인 경우
"함수" --if 값은 함수입니다.
다음은 typeof 연산자를 사용하는 몇 가지 예입니다.
alert(typeof message); // "string"
alert(typeof(message)) // "string"
alert( typeof 95); // "number"
이 예제는 typeof 연산자의 피연산자가 변수이거나 숫자 리터럴일 수 있음을 보여줍니다. typeof는 함수가 아니라 연산자이므로 예제의 괄호는 사용할 수는 있지만 필요하지 않습니다.


때때로 typeof 연산자가 혼란스럽기는 하지만 기술적으로는 올바른 값을 반환합니다. 예를 들어, typeof null을 호출하면 특수 값 null이 null 개체 참조로 간주되므로 "object"가 반환됩니다. Safari 5 이하와 Chrome 7 이하에서는 정규 표현식에서 typeof 연산자를 호출할 때 "function"을 반환하는 반면, 다른 브라우저는 이 경우 "object"를 반환합니다. 기술적으로 말하면 ECMAScript의 함수는 데이터 유형이 아니라 객체입니다. 그러나 함수에는 몇 가지 특별한 속성이 있으므로 typeof 연산자를 통해 함수를 다른 객체와 구별해야 합니다.

2.1 정의되지 않은 유형


정의되지 않은 유형에는 특수한 정의되지 않은 값이 하나만 있습니다. 이 값은 null 개체 포인터와 초기화되지 않은 변수를 공식적으로 구별하기 위해 도입되었습니다. 아직 선언되지 않은 변수의 경우 데이터 유형을 감지하기 위해 typeof 연산자를 사용하는 작업 하나만 수행할 수 있습니다. 다음 예를 살펴보세요.


var message; // 이 변수는 선언된 후 기본적으로 정의되지 않은 값을 갖습니다.

alert(typeof message); // "undefine"

alert(typeof age); 정의되지 않음"
결과는 초기화되지 않고 선언되지 않은 변수에 대해 typeof 연산자를 실행하면 정의되지 않은 값을 반환한다는 것을 보여줍니다. 왜냐하면 두 변수는 기술적인 관점에서는 본질적으로 다르지만 실제로는 어느 변수에 대해서도 실제 연산을 수행하는 것이 불가능하기 때문입니다.

2.2 널 유형


널 유형은 값이 하나만 있는 데이터 유형이며 이 특수 값은 널입니다. 논리적인 관점에서 null 값은 null 개체 포인터를 나타내므로 typeof 연산자를 사용하여 null 값을 검색하면 "object"가 반환됩니다.

정의된 변수가 향후 객체를 담는 데 사용될 예정이라면 다른 값 대신 변수를 null로 초기화하는 것이 좋습니다.

실제로 정의되지 않은 값은 null 값에서 파생되므로 ECMA-262에서는 동등성 테스트가 true를 반환해야 한다고 규정합니다.
alert(null == undefine) //true
여기서 null과 undef 사이의 동등 연산자( ==)는 항상 true를 반환하지만 이 연산자는 비교 목적으로 피연산자를 변환한다는 점에 유의하세요.


null과 undefine은 이러한 관계를 갖고 있지만 용도는 완전히 다릅니다. 어떤 경우에도 변수 값을 명시적으로 정의되지 않음으로 설정할 필요는 없지만 null에는 동일한 규칙이 적용되지 않습니다. 즉, 개체를 보유하도록 의도된 변수가 실제로 개체를 보유하지 않는 한 변수가 null 값을 보유하도록 명시적으로 허용해야 합니다. 이렇게 하면 null 객체 포인터로서의 null 규칙을 반영할 뿐만 아니라 null과 정의되지 않은 것을 더 잘 구별하는 데도 도움이 됩니다.

2.3 부울 유형


부울 유형에는 대소문자를 구분하는 true와 false의 두 가지 리터럴 값만 있습니다.


false로 변환된 값: false , ""(빈 문자열), 0 및 NaN , null , 정의되지 않음

2.4 숫자 유형


숫자 유형: 정수 및 부동 소수점 값.

부동 소수점 값을 저장하려면 정수 값을 저장할 때보다 두 배의 메모리 공간이 필요하므로 ECMAScript는 기회를 잃지 않고 부동 소수점 값을 정수 값으로 변환합니다. 분명히 소수점 뒤에 숫자가 없으면 값은 정수 값으로 저장될 수 있습니다.

var floatNum1 = 1.; // 소수점 이하 자릿수 없음 - 1로 해석
var floatNum2 = 10.0; // 정수 - 10으로 해석
부동 소수점 값의 가장 높은 정밀도는 소수점 이하 17자리입니다. 산술 계산 정확도는 정수보다 훨씬 낮습니다.


부동 소수점 숫자 계산에서 반올림 오류가 발생하는 문제와 관련하여 한 가지 분명히 해야 할 점은 IEEE754 숫자 값을 기반으로 하는 부동 소수점 계산을 사용할 때 흔히 발생하는 문제입니다. ECMAScript는 다른 언어에서 고유하지 않습니다. 동일한 숫자 형식을 사용하는 경우에도 이 문제가 있습니다.

isFinite() 함수는 값이 유한한지(최소값과 최대값 사이에 있는지) 확인할 수 있습니다. 이 함수는 인수가 최소값과 최대값 사이에 있으면 true를 반환합니다.

NaN, 즉 Not a Number(숫자가 아님)는 특별한 값입니다. 이 값은 값을 반환해야 했던 피연산자가 값을 반환하지 않음을 나타내는 데 사용됩니다(그래서 오류가 발생하지 않습니다). ). 예를 들어 ECMAScript에서 숫자를 0으로 나누면 NaN이 반환되므로 다른 코드 실행에는 영향을 주지 않습니다. NaN 자체에는 두 가지 특이한 특성이 있습니다. 첫째, NaN(예: NaN/10)과 관련된 모든 연산은 NaN을 반환하므로 다단계 계산에서 문제가 발생할 수 있습니다. 둘째, NaN은 NaN 자체를 포함한 어떤 값과도 동일하지 않습니다. 예를 들어 다음 코드는 false를 반환합니다. Alert(NaN == NaN); //false
isNaN() 값을 받은 후 해당 값을 숫자 값으로 변환하려고 시도합니다. 숫자가 아닌 일부 값은 문자열 "10"이나 부울 값과 같은 숫자 값으로 직접 변환됩니다. 숫자 값으로 변환할 수 없는 값은 이 함수가 true를 반환하도록 합니다. 다음 예를 참조하세요.
alert(isNaN(NaN)); //true Alert(isNaN("10")) //false(값 10으로 변환 가능)
alert(isNaN("blue")) ; //true(숫자 값으로 변환할 수 없음) Alert(isNaN(true)); //false(숫자 값 1로 변환 가능)

isNaN()은 객체에도 적용됩니다. 객체를 기준으로 isNaN() 함수를 호출하면 해당 객체의 valueOf() 메서드를 먼저 호출한 후 해당 메서드에서 반환한 값을 숫자값으로 변환할 수 있는지 여부를 판단합니다. 그렇지 않은 경우 이 반환 값을 기반으로 toString() 메서드를 호출한 다음 반환 값을 테스트합니다. 이 프로세스는 ECMAScript에 내장된 함수와 연산자의 일반적인 실행 흐름이기도 합니다.

숫자 변환: 숫자가 아닌 값을 숫자 값으로 변환할 수 있는 함수에는 Number(),parseInt(),parseFloat() 3가지가 있습니다.
변환 함수 Number()는 모든 데이터 유형에 사용할 수 있는 반면, 다른 두 함수는 특히 문자열을 숫자 값으로 변환하는 데 사용됩니다. 이 세 가지 함수는 동일한 입력에 대해 서로 다른 결과를 반환합니다.
Number() 함수의 변환 규칙은 다음과 같습니다.
 Boolean 값인 경우 true와 false는 각각 1과 0으로 변환됩니다.
 숫자 값인 경우 단순히 전달되어 반환됩니다.
 null 값인 경우 0이 반환됩니다.
 정의되지 않은 경우 NaN을 반환합니다.
 문자열인 경우 다음 규칙을 따르세요.
nn 문자열에 숫자만 포함된 경우(양수 또는 음수 기호 앞에 오는 숫자 포함) 십진수 값으로 변환됩니다. 즉, "1"이 됩니다. 1, "123"은 123이 되고 "011"은 11이 됩니다(참고: 선행 0은 무시됩니다).
NN 문자열에 "1.1"과 같은 유효한 부동 소수점 형식이 포함되어 있으면 해당 형식으로 변환됩니다. 부동 소수점 값(앞의 0은 무시됨)
NN 문자열에 "0xf"와 같은 유효한 16진수 형식이 포함되어 있으면 이를 동일한 크기의 10진수 값으로 변환합니다. 문자가 포함되어 있지 않음) 0으로 변환됩니다.
NN 문자열에 위 형식 이외의 문자가 포함되어 있으면 NaN으로 변환됩니다.
 객체인 경우 객체의 valueOf() 메서드를 호출한 후 이전 규칙에 따라 반환된 값을 변환합니다. 변환 결과가 NaN인 경우 객체의 toString() 메서드를 호출한 다음 반환된 문자열 값을 이전 규칙에 따라 다시 변환합니다.
아래에 몇 가지 구체적인 예를 들어보겠습니다.
var num1 = Number("안녕하세요!"); //NaN
var num2 = Number("") //0
var num3 = Number("000011") //11
var num4 = Number(true ); //1
parseInt() 함수는 정수를 처리할 때 더 일반적으로 사용됩니다. parseInt() 함수는 문자열을 변환할 때 공백이 아닌 첫 번째 문자를 찾을 때까지 문자열 앞의 공백을 무시합니다. 첫 번째 문자가 숫자 또는 음수 기호가 아닌 경우,parseInt()는 NaN을 반환합니다. 즉, 빈 문자열을 변환하기 위해 parsInt()를 사용하면 NaN이 반환됩니다(Number()는 null 문자의 경우 0을 반환합니다). 첫 번째 문자가 숫자인 경우, parsInt()는 모든 후속 문자가 구문 분석되거나 숫자가 아닌 문자를 만날 때까지 두 번째 문자를 계속 구문 분석합니다. 예를 들어, "1234blue"는 1234로 변환됩니다. "blue"는 완전히 무시되기 때문입니다. 마찬가지로 "22.5"는 소수점이 유효한 숫자가 아니기 때문에 22로 변환됩니다.
문자열의 첫 번째 문자가 숫자인 경우,parseInt()는 다양한 정수 형식도 인식할 수 있습니다. 문자열이 "0x"로 시작하고 뒤에 숫자가 오면 16진수 정수로 해석됩니다. 문자열이 "0"으로 시작하고 뒤에 숫자가 오면 8진수로 해석됩니다.
parseInt() 함수의 변환 규칙을 더 잘 이해하기 위해 아래에 몇 가지 예가 나와 있습니다.
var num1 =parseInt("1234blue") // 1234 var num2 = parseInt("") // NaN
var num3 =parseInt("0xA"); // 10(16진수) var num4 =parseInt(22.5); // 22
var num5 =parseInt("070") // 56(8진수) var num6 =parsInt( "70"); // 70(10진수)
var num7 = parsInt("0xf"); // 15(16진수)
var num = parseInt("070") // ES5 JavaScript에서는 parsInt()에는 더 이상 8진수 값을 구문 분석하는 기능이 없습니다. parsInt() 함수는 두 번째 매개변수, 즉 변환에 사용되는 기준(즉 기준)을 제공합니다.
var num = parsInt("0xAF", 16); //175 var num1 =parseInt("AF", 16); //175
두 번째 매개변수로 16을 지정하면 문자열에 " 0x가 없어도 됩니다. ".
parseInt() 함수와 유사하게, parseFloat()도 첫 번째 문자(위치 0)부터 시작하여 각 문자를 구문 분석합니다. 그리고 문자열이 끝날 때까지 또는 잘못된 부동 소수점 숫자 문자가 나타날 때까지 구문 분석됩니다. 즉, 문자열의 첫 번째 소수점은 유효하지만 두 번째 소수점은 유효하지 않으므로 그 뒤의 문자열은 무시됩니다. "22.34.5"는 22.34로 변환됩니다.
유효한 첫 번째 소수점 외에도,parseFloat()와parseInt()의 두 번째 차이점은 항상 선행 0을 무시한다는 것입니다. parseFloat()는 십진 정수 형식을 포함하여 이전에 설명한 모든 부동 소수점 숫자 형식을 인식합니다. 그러나 16진수 형식의 문자열은 항상 0으로 변환됩니다. parseFloat()는 소수 값만 구문 분석하므로 두 번째 매개변수로 기준을 지정하는 용도가 없습니다. 마지막으로 주의할 점: 문자열에 정수로 구문 분석할 수 있는 숫자가 포함되어 있는 경우(소수점이 없거나 소수점 이하가 모두 0인 경우),parseFloat()는 정수를 반환합니다. 다음은 숫자 값을 변환하기 위해 parseFloat()를 사용하는 몇 가지 일반적인 예입니다.
var num1 =parseFloat("1234blue"); //1234(정수) var num2 =parseFloat("0xA"); //0
var num3 =parseFloat("22.5"); 22.34.5"); //22.34
var num5 =parseFloat("0908.5"); //908.5 var num6 =parseFloat("3.125e7"); //31250000

2.5 String type

ECMAScript의 문자열은 변경할 수 없습니다. 즉, 문자열이 생성되면 해당 값은 변경할 수 없습니다. 예:
var lang = "Java";
lang = lang + "Script";
위 예의 변수 lang에는 처음에 "Java"라는 문자열이 포함되어 있습니다. 두 번째 코드 줄은 lang 값을 "JavaScript"로 재정의합니다. 이 작업을 구현하는 프로세스는 다음과 같습니다. 먼저 10자를 포함할 수 있는 새 문자열을 만든 다음 이 문자열을 "Java" 및 "Script"로 채우고 마지막 단계는 원래 문자열 "Java" 및 "String"을 삭제하는 것입니다. "스크립트"는 이 두 문자열이 더 이상 유용하지 않기 때문입니다.
ageAsString = age.toString(); // String "11"
varfound = true; varfoundAsString =found.toString(); //문자열 "true"
숫자 값, 객체 및 문자열 값(예, 모든 문자열에는 문자열의 복사본을 반환하는 toString() 메서드도 있습니다)에는 toString() 메서드가 있습니다. 하지만 null 및 정의되지 않은 값에는 이 방법이 없습니다.
변환할 값이 null인지 정의되지 않은지 알 수 없는 경우 변환 함수 String()을 사용할 수도 있습니다. 이 함수는 모든 유형의 값을 문자열로 변환할 수 있습니다. String() 함수는 다음 변환 규칙을 따릅니다.
 값에 toString() 메서드가 있으면 매개변수 없이 메서드를 호출하고 해당 결과를 반환합니다.
 값이 null이면 "null"을 반환합니다.  값이 정의되지 않은 경우 "정의되지 않음"이 반환됩니다.
null 및 undefed에는 toString() 메서드가 없기 때문에 String() 함수는 이 두 값의 리터럴 값을 반환합니다.
팁: 값을 문자열로 변환하려면 더하기 연산자를 사용하여 문자열("")에 추가할 수 있습니다.

2.6 객체 유형


ECMAScript의 객체는 실제로 데이터와 함수의 모음입니다. 만들기: var o = new Object();

Object의 모든 인스턴스에는 다음과 같은 속성과 메서드가 있습니다.
 생성자: 현재 객체를 생성하는 데 사용된 함수를 저장합니다. 이전 예에서 생성자는 Object()입니다.
 hasOwnProperty(propertyName): 주어진 속성이 현재 객체 인스턴스에 존재하는지 확인하는 데 사용됩니다. 이 중 매개변수인 속성 이름(propertyName)은 문자열 형식으로 지정해야 합니다(예: o.hasOwnProperty("name")).
 isPrototypeOf(object): 들어오는 개체가 들어오는 개체의 프로토타입인지 확인하는 데 사용됩니다.
 propertyIsEnumerable(propertyName): for-in 문을 사용하여 특정 속성을 열거할 수 있는지 확인하는 데 사용됩니다. hasOwnProperty() 메서드와 마찬가지로 매개변수인 속성 이름은 문자열 형식으로 지정해야 합니다.
 toLocaleString(): 실행 환경의 영역에 해당하는 객체의 문자열 표현을 반환합니다.
 toString(): 객체의 문자열 표현을 반환합니다.
 valueOf(): 객체의 문자열, 숫자 또는 부울 표현을 반환합니다. 일반적으로 toString() 메서드의 반환 값과 동일합니다.
Object는 ECMAScript의 모든 객체의 기본이므로 모든 객체에는 이러한 기본 속성과 메서드가 있습니다.

기술적으로 말하면 ECMA-262의 개체 동작이 반드시 JavaScript의 다른 개체에 적용되는 것은 아닙니다. BOM 및 DOM의 개체와 같은 브라우저 환경의 개체는 호스트 구현에 의해 제공되고 정의되므로 호스트 개체입니다. ECMA-262는 호스트 개체 정의를 담당하지 않으므로 호스트 개체는 개체에서 상속할 수도 있고 상속하지 않을 수도 있습니다.

3. Note


(1) 어떤 피연산자라도 NaN과 비교하면 결과는 false가 됩니다.

(2) null == undefine은 유사한 값이기 때문에 true를 반환하지만, null === undefine은 값 유형이 다르기 때문에 false를 반환합니다.

위 내용은 js 데이터 유형에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.