ECMAScript 타입 변환
- 이전 페이지 ECMAScript 원시 타입
- 다음 페이지 ECMAScript 참조 타입
모든 프로그래밍 언어의 가장 중요한 특징 중 하나는 유형 변환을 수행할 수 있는 능력입니다.
ECMAScript는 개발자에게 많은 간단한 유형 변환 메서드를 제공합니다.
대부분의 유형은 간단한 변환을 수행할 수 있는 메서드를 가지고 있으며, 몇 가지 전체 메서드를 사용하여 복잡한 변환을 수행할 수 있습니다. 어떤 경우든 ECMAScript에서는 유형 변환은 단순한 단계의 작업입니다.
문자열로 변환
ECMAScript의 Boolean 값, 숫자, 문자열의 원시 값의 흥미로운 점은 그들이 가상 객체라는 것입니다. 이는 그들이 실제로 속성과 메서드를 가지고 있다는 의미입니다.
예를 들어, 문자열의 길이를 얻으려면 다음과 같은 코드를 사용할 수 있습니다:
var sColor = "red"; alert(sColor.length); // "3" 출력
"red" 이 원시 유형의 문자열이어도, 그것은 문자열의 크기를 저장하는 length 속성을 가지고 있습니다.
결론적으로, 3가지 주요 원시 유형인 Boolean 값, 숫자, 문자열은 모두 toString() 메서드를 가지고 있으며, 그들의 값을 문자열로 변환할 수 있습니다.
푸터:대신 할아버지가 물었습니다. "문자열에는 toString() 메서드가 있습니까, 이는 불필요하지 않습니까?" 예, 정말 그렇습니다. ECMAScript는 모든 객체가 toString() 메서드를 정의했습니다. 그것이 가상 객체든 실제 객체든 상관없습니다. 문자열 유형이 가상 객체이기 때문에, 반드시 toString() 메서드가 있어야 합니다.
Boolean 타입의 toString() 메서드는 "true" 또는 "false"만 출력합니다. 결과는 변수의 값에 따릅니다:
var bFound = false; alert(bFound.toString()); // 출력 "false"
Number 타입의 toString() 메서드는 특별합니다. 두 가지 모드가 있습니다.기본 모드그리고기초 모드기본 모드를 사용하여 toString() 메서드는 숫자 값(정수, 소수, 과학적 표기법을 포함하여)을 해당 문자열로 출력합니다. 예를 들어:
var iNum1 = 10; var iNum2 = 10.0; alert(iNum1.toString()); // 출력 "10" alert(iNum2.toString()); // 출력 "10"
주석:기본 모드에서는 원래 숫자를 어떤 형식으로도 선언했든, Number 타입의 toString() 메서드는 항상 숫자의 십진수 표현을 반환합니다. 따라서, 8진수나 16진수 표면량으로 선언된 숫자는 모두 십진수 형식으로 출력됩니다。
Number 타입의 toString() 메서드의 기본 모드를 사용하여 다른기초숫자를 출력합니다. 예를 들어, 이진 기초는 2입니다. 8진수 기초는 8입니다. 16진수 기초는 16입니다。
기초toString() 메서드의 파라미터로 사용되는 기초의 또 다른 추가입니다.
var iNum = 10; alert(iNum.toString(2)); // 출력 "1010" alert(iNum.toString(8)); // 출력 "12" alert(iNum.toString(16)); // 출력 "A"
이전 예제에서는 숫자 10을 3가지 다른 형식으로 출력했습니다. 즉, 이진 형식, 8진수 형식, 16진수 형식. HTML은 각 색상을 16진수로 표현하므로, HTML에서 숫자를 처리할 때 이 기능은 매우 유용합니다。
주석:숫자에 toString(10)을 호출하는 것과 toString()을 호출하는 것은 같습니다. 두 가지 모두 숫자의 십진수 형식을 반환합니다。
참조:
보기: JavaScript 참조 가이드toString() 메서드에 대한 상세 정보를 제공합니다:
숫자 변환
ECMAScript는 NaN의 원시 값을 숫자로 변환하는 두 가지 방법을 제공합니다. 즉, parseInt()과 parseFloat()입니다.
그렇게 생각할 수도 있습니다. 전자는 값을 정수로 변환하며, 후자는 값을 실수로 변환합니다. 이 메서드는 String 타입에 대해만 올바르게 작동하며, 다른 타입에 대해 반환하는 것은 모두 NaN입니다.
parseInt()
parseInt()과 parseFloat()는 문자열이 숫자 값인지 여부를 확인하기 전에 철저히 분석합니다.
parseInt() 메서드는 위치 0에 있는 문자를 먼저 확인하고, 그 문자가 유효한 숫자인지 확인합니다. 그렇지 않으면, 이 메서드는 NaN을 반환하고 다른 작업을 더 이상 수행하지 않습니다. 그러나 해당 문자가 유효한 숫자라면,该方法은 위치 1에 있는 문자를 확인하고 동일한 테스트를 수행합니다. 이 과정은 유효하지 않은 숫자 문자가 발견되기까지 계속됩니다. 이 때 parseInt()은 그 문자之前的 문자열을 숫자로 변환합니다.
예를 들어, "12345red" 문자열을 정수로 변환하려면 parseInt()은 12345을 반환합니다. 이는 문자 r을 확인했을 때 검사 과정을 중단하기 때문입니다.
문자열에 포함된 숫자 리터럴은 정확하게 숫자로 변환됩니다. 예를 들어, "0xA"은 정확하게 숫자 10으로 변환됩니다. 그러나 "22.5" 문자열은 22로 변환됩니다. 이는 정수에서 소수점은 무효 문자이기 때문입니다.
일부 예제를 보여드리겠습니다:
var iNum1 = parseInt("12345red"); //반환 12345 var iNum1 = parseInt("0xA"); //반환 10 var iNum1 = parseInt("56.9"); //반환 56 var iNum1 = parseInt("red"); //반환 NaN
parseInt() 메서드에는 기본 모드가 있으며, 이진수, 8진수, 16진수 또는 다른 어떤 진수의 문자열을 정수로 변환할 수 있습니다. 기본 값은 parseInt() 메서드의 두 번째 인자로 지정되며, 16진수 값을 해석하려면 다음과 같이 parseInt() 메서드를 호출해야 합니다:
var iNum1 = parseInt("AF", 16); //반환 175
물론이죠, 이진수, 8진수 그리고 심지어 십진수(기본 모드)에 대해도 이렇게 parseInt() 메서드를 호출할 수 있습니다:
var iNum1 = parseInt("10", 2); //반환 2 var iNum2 = parseInt("10", 8); //반환 8 var iNum3 = parseInt("10", 10); //반환 10
десятичное число содержит префикс 0, лучше использовать基数 10, чтобы не получить неожиданную восьмеричную стоимость. Например:
var iNum1 = parseInt("010"); //반환 8 var iNum2 = parseInt("010", 8); //반환 8 var iNum3 = parseInt("010", 10); //반환 10
이 코드에서, 두 줄의 코드가 문자 "010"을 숫자로 해석합니다. 첫 번째 코드는 이 문자열을 8진수 값으로 간주하고, 두 번째 코드와 같은 방식으로 해석합니다. 마지막 줄 코드는 기본数为 10으로 선언되었기 때문에 iNum3이 마지막으로 10으로 설정됩니다.
보기:
보기: JavaScript 참조 가이드parseInt() 메서드에 대한 상세 정보를 제공합니다:parseInt().
parseFloat()
parseFloat() 메서드는 parseInt() 메서드와 유사하게, 위치 0에서 각 문자를 확인하고, 첫 번째 유효하지 않은 문자까지 확인한 후, 그 문자 이전의 문자열을 정수로 변환합니다.
그러나, 이 메서드에 있어서, 첫 번째로 나타나는 소수점은 유효한 문자입니다. 두 개의 소수점이 있다면, 두 번째 소수점은 무효로 간주됩니다. parseFloat()는 소수점 이전의 문자를 숫자로 변환합니다. 이는 문자열 "11.22.33"이 11.22로 해석됨을 의미합니다.
parseFloat() 메서드를 사용하는 또 다른 차이점은, 문자열이 십진수로 표현된 부동소수점수를 나타내어야 하며, 8진수나 16진수로 표현되지 않아야 합니다. 이 메서드는 앞쪽 0을 무시하므로, 8진수 0102는 102로 해석됩니다. 16진수 0xA는 부동소수점수에서 x가 유효한 문자가 아니므로, NaN을 반환합니다。(주석:테스트에 따르면, 특정 브라우저 구현은 NaN 대신 0을 반환합니다。)
또한, parseFloat() 메서드에는 기본 모드가 없습니다。
다음은 parseFloat() 메서드를 사용하는 몇 가지 예제입니다:
var fNum1 = parseFloat("12345red"); //반환 12345 var fNum2 = parseFloat("0xA"); //반환 NaN var fNum3 = parseFloat("11.2"); //반환 11.2 var fNum4 = parseFloat("11.22.33"); //반환 11.22 var fNum5 = parseFloat("0102"); // 102을 반환 var fNum1 = parseFloat("red"); // NaN을 반환
보기:
보기: JavaScript 참조 가이드parseFloat() 메서드에 대한 자세한 정보를 제공합니다:parseFloat().
타입 변환
또한 사용할 수 있습니다타입 변환(type casting)타입 변환 값을 처리하기 위해 사용됩니다. 타입 변환을 사용하여 특정 값을 접근할 수 있습니다. 그리고 그 값이 다른 타입일 수도 있습니다.
편집자 주:cast는 "铸造"이라는 의미가 있어, "강제 변환"이라는 의미에 매우 어울립니다.
ECMAScript에서 사용할 수 있는 3가지 타입 변환은 다음과 같습니다:
- Boolean(value) - 주어진 값을 Boolean 타입으로 변환합니다;
- Number(value) - 주어진 값을 숫자로 변환합니다(정수 또는 부호浮소수가 될 수 있습니다);
- String(value) - 주어진 값을 문자열로 변환합니다;
이 세 함수 중 하나를 사용하여 값을 변환하면, 원래 값으로 직접 변환된 값을 저장하는 새로운 값을 생성합니다. 이는 예상치 못한 결과를 초래할 수 있습니다.
Boolean() 함수
변환할 값이 문자열이거나 비 0 숫자나 객체가 되는 경우, Boolean() 함수는 true를 반환합니다. 이 값이 비어있는 문자열, 숫자 0, undefined 또는 null인 경우에는 false를 반환합니다.
Boolean 타입의 타입 변환을 테스트할 수 있는 코드는 다음과 같습니다:
var b1 = Boolean(""); // false - 비어있는 문자열 var b2 = Boolean("hello"); // true - 비 비어있는 문자열 var b1 = Boolean(50); // true - 비 0 숫자 var b1 = Boolean(null); // false - null var b1 = Boolean(0); // false - 0 var b1 = Boolean(new object()); // true - 객체
Number() 함수
Number() 함수의 타입 변환은 parseInt()와 parseFloat() 메서드와 유사하지만, 전체 값을 변환하는 것이 아니라 일부 값을 변환합니다.
기억하시나요, parseInt()와 parseFloat() 메서드는 첫 번째 무효 문자 이전의 문자열만 변환합니다. 따라서 "1.2.3"은 각각 "1"과 "1.2"로 변환됩니다.
Number()를 사용한 강제 타입 변환에서, "1.2.3"은 전체 문자열 값이 숫자로 변환되지 않기 때문에 NaN을 반환합니다. 문자열 값이 완전히 변환될 수 있다면, Number()는 parseInt() 메서드 또는 parseFloat() 메서드를 호출합니다.
다음 표는 다양한 값에 대해 Number() 메서드를 호출할 때 발생하는 일들에 대해 설명합니다:
용법 | 결과 |
---|---|
Number(false) | 0 |
Number(true) | 1 |
Number(undefined) | NaN |
Number(null) | 0 |
Number("1.2") | 1.2 |
Number("12") | 12 |
Number("1.2.3") | NaN |
Number(new object()) | NaN |
Number(50) | 50 |
String() 함수
최종 강제 타입 변환 방법 String()은 가장 간단한 방법으로, 어떤 값도 문자열로 변환할 수 있습니다.
이러한 강제 타입 변환을 수행하려면, 전달된 값의 toString() 메서드를 호출만 하면 됩니다. 즉, 12를 "12"로 변환하고, true를 "true"로 변환하고, false를 "false"로 변환하는 것과 같습니다.
강제 타입 변환을 할 때, null과 undefined 값은 toString() 메서드를 호출하여 문자열을 생성할 수 있지만 오류를 발생시키지 않습니다:
var s1 = String(null); // "null" var oNull = null; var s2 = oNull.toString(); // 오류가 발생합니다
ECMAScript와 같은 week typed language를 처리할 때, 강제 타입 변환은 매우 유용하지만, 값을 올바르게 사용하는 것을 확인해야 합니다.
- 이전 페이지 ECMAScript 원시 타입
- 다음 페이지 ECMAScript 참조 타입