수색…
비고
일부 언어에서는 선언 할 변수의 종류를 미리 정의해야합니다. JavaScript는 그렇게하지 않습니다. 그것은 스스로 알아 내려고 노력할 것입니다. 경우에 따라 예기치 않은 동작이 발생할 수 있습니다.
다음 HTML을 사용하는 경우
<span id="freezing-point">0</span>
JS를 통해 콘텐츠를 검색하면 예상 할 수있는 것처럼 숫자로 변환 되지 않습니다 . 다음 스 니펫을 사용하면 boilingPoint
가 100
이 될 것으로 예상 할 수 있습니다. 그러나 JavaScript는 moreHeat
를 문자열로 변환하고 두 문자열을 연결합니다. 결과는 0100
됩니다.
var el = document.getElementById('freezing-point');
var freezingPoint = el.textContent || el.innerText;
var moreHeat = 100;
var boilingPoint = freezingPoint + moreHeat;
freezingPoint
를 명시 적으로 숫자로 변환하여이 문제를 해결할 수 있습니다.
var el = document.getElementById('freezing-point');
var freezingPoint = Number(el.textContent || el.innerText);
var boilingPoint = freezingPoint + moreHeat;
첫 번째 행에서는 "0"
(문자열)을 0
(숫자)으로 변환하여 저장합니다. 추가 작업을 수행 한 후 예상 결과 ( 100
)를 얻습니다.
문자열을 숫자로 변환
Number('0') === 0
Number('0')
는 문자열 ( '0'
)을 숫자 ( 0
)로 변환합니다.
더 짧지 만 덜 명확한 형식 :
+'0' === 0
단항 +
연산자는 숫자에는 아무런 영향을주지 않지만 다른 것은 숫자로 변환합니다.
흥미롭게도, +(-12) === -12
.
parseInt('0', 10) === 0
parseInt('0', 10)
는 문자열 ( '0'
)을 숫자 ( 0
)로 변환하고 두 번째 인수 인 기수를 잊지 않습니다. 지정되어 있지 않은 경우, parseInt는 string를 잘못된 번호로 변환 할 수 있습니다.
숫자를 문자열로 변환하기
String(0) === '0'
String(0)
은 숫자 ( 0
)을 문자열 ( '0'
)로 변환합니다.
더 짧지 만 덜 명확한 형식 :
'' + 0 === '0'
이중 부정 (!! x)
이중 부정 !!
별개의 JavaScript 연산자 나 특수 구문이 아니라 오히려 두 번의 부정의 순서입니다. 그것의 적절한 모든 유형의 값을 변환하는 데 사용됩니다 true
또는 false
이 truthy 또는 falsy 여부에 따라 부울 값입니다.
!!1 // true
!!0 // false
!!undefined // false
!!{} // true
!![] // true
첫 번째 부정은 어떤 값으로 변환 false
가 truthy하고있는 경우 true
falsy 경우. 그런 다음 두 번째 부정은 정상 부울 값에서 작동합니다. 이들은 어떤 truthy 값으로 변환 true
과 어떤 falsy 값 false
.
그러나 많은 전문가들은 그러한 구문을 사용할 수없는 관행을 받아 들일 수 없다고 생각하고 작성하는 데 더 오래 걸리더라도 대안을 읽는 것이 더 간단하다고 권장합니다.
x !== 0 // instead of !!x in case x is a number
x != null // instead of !!x in case x is an object, a string, or an undefined
!!x
사용은 다음과 같은 이유로 인해 빈약 한 것으로 간주됩니다.
- 문법적으로는 뚜렷한 특수 구문처럼 보일 수 있지만 암묵적인 형식 변환에서는 두 번의 연속 된 부정을 제외하고는 아무 것도하지 않습니다.
- 코드를 통해 변수 및 속성에 저장된 값 유형에 대한 정보를 제공하는 것이 좋습니다. 예를 들어,
x !== 0
은x
가 아마 숫자라고 말하면서!!x
는 코드의 독자에게 그런 이점을 전가하지 않습니다. -
Boolean(x)
사용은 유사한 기능을 허용하며 유형의보다 명시적인 변환입니다.
암시 적 변환
JavaScript는 사용시 자동으로 변수를보다 적합한 유형으로 변환하려고합니다. 일반적으로 전환을 명시 적으로 수행하는 것이 좋습니다 (다른 예 참조).하지만 전환이 암시 적으로 발생하는 것을 알아야합니다.
"1" + 5 === "15" // 5 got converted to string.
1 + "5" === "15" // 1 got converted to string.
1 - "5" === -4 // "5" got converted to a number.
alert({}) // alerts "[object Object]", {} got converted to string.
!0 === true // 0 got converted to boolean
if ("hello") {} // runs, "hello" got converted to boolean.
new Array(3) === ",,"; // Return true. The array is converted to string - Array.toString();
더 까다로운 부분 중 일부는 다음과 같습니다.
!"0" === false // "0" got converted to true, then reversed.
!"false" === false // "false" converted to true, then reversed.
숫자를 부울로 변환
Boolean(0) === false
Boolean(0)
은 숫자 0
을 부울 false
로 변환합니다.
더 짧지 만 덜 명확한 형식 :
!!0 === false
문자열을 부울로 변환
문자열을 부울로 변환하려면 use
Boolean(myString)
또는 짧지 만 덜 명확한 형태
!!myString
빈 문자열 (길이가 0 인 문자열)을 제외한 모든 문자열은 부울 값으로 true
로 평가됩니다.
Boolean('') === false // is true
Boolean("") === false // is true
Boolean('0') === false // is false
Boolean('any_nonempty_string') === true // is true
부동 소수점에 대한 정수
JavaScript에서는 모든 숫자가 내부적으로 수레로 표시됩니다. 즉, 정수를 부동 소수점으로 사용하는 것만으로 변환 할 수 있습니다.
정수로 플로트
부동 소수점을 정수로 변환하기 위해 JavaScript는 여러 가지 방법을 제공합니다.
floor
함수는 float보다 작거나 같은 첫 번째 정수를 반환합니다.
Math.floor(5.7); // 5
ceil
함수는 float보다 크거나 같은 첫 번째 정수를 반환합니다.
Math.ceil(5.3); // 6
round
함수는 float을 반올림합니다.
Math.round(3.2); // 3
Math.round(3.6); // 4
잘림 ( trunc
) 플로트에서 소수를 제거합니다.
Math.trunc(3.7); // 3
절단 (사이의 차이에 주목 trunc
) 및 floor
:
Math.floor(-3.1); // -4
Math.trunc(-3.1); // -3
문자열을 float로 변환하십시오.
parseFloat
는 문자열을 인수로 받아 들여 float /
parseFloat("10.01") // = 10.01
부울로 변환
Boolean(...)
은 모든 데이터 유형을 true
또는 false
로 변환합니다.
Boolean("true") === true
Boolean("false") === true
Boolean(-1) === true
Boolean(1) === true
Boolean(0) === false
Boolean("") === false
Boolean("1") === true
Boolean("0") === true
Boolean({}) === true
Boolean([]) === true
빈 문자열과 숫자 0은 false로 변환되고 다른 모든 문자열은 true로 변환됩니다.
더 짧지 만 덜 명확한 형식 :
!!"true" === true
!!"false" === true
!!-1 === true
!!1 === true
!!0 === false
!!"" === false
!!"1" === true
!!"0" === true
!!{} === true
!![] === true
이 짧은 형식은 논리적 NOT 연산자를 두 번 사용하는 암시 적 유형 변환을 활용합니다 ( http://www.riptutorial.com/javascript/example/3047/double-negation#x-
다음은 ECMAScript 사양 의 부울 변환의 전체 목록입니다.
- 만약
myArg
타입undefined
또는null
다음Boolean(myArg) === false
- 만약
myArg
형의boolean
다음Boolean(myArg) === myArg
-
myArg
가number
유형이면Boolean(myArg) === false
myArg
가+0
,‑0
또는NaN
이면Boolean(myArg) === false
. 그렇지 않으면true
- 만약
string
이myArg
라면Boolean(myArg) === false
myArg
가 빈 문자열이면 (길이는 0입니다.); 그렇지 않으면true
-
symbol
또는object
유형의myArg
다음Boolean(myArg) === true
부울로 false
으로 변환되는 값은 false
이라고 불 립니다 (그리고 다른 모든 것은 진실 이라고 합니다 ). 비교 연산을 참조하십시오.
배열을 문자열로 변환
Array.join(separator)
은 구성 가능한 구분 기호와 함께 배열을 문자열로 출력하는 데 사용할 수 있습니다.
기본값 (separator = ",") :
["a", "b", "c"].join() === "a,b,c"
문자열 분리 기호 사용 :
[1, 2, 3, 4].join(" + ") === "1 + 2 + 3 + 4"
공백 구분 기호 사용 :
["B", "o", "b"].join("") === "Bob"
배열 메서드를 사용하여 문자열에 배열
이 방법은 익명의 함수를 사용하여 join ()으로 할 수있는 일을 성취하기 때문에 사용자가 될 수 있습니다. 그러나 배열을 문자열로 변환하는 동안 문자열에 무언가를 만들어야하는 경우 유용 할 수 있습니다.
var arr = ['a', 'á', 'b', 'c']
function upper_lower (a, b, i) {
//...do something here
b = i & 1 ? b.toUpperCase() : b.toLowerCase();
return a + ',' + b
}
arr = arr.reduce(upper_lower); // "a,Á,b,C"
원시 기본 변환 테이블
값 | 문자열로 변환 됨 | 숫자로 변환 됨 | 부울로 변환 |
---|---|---|---|
정의되지 않은 | "정의되지 않음" | NaN | 그릇된 |
없는 | "없는" | 0 | 그릇된 |
참된 | "참된" | 1 | |
그릇된 | "그릇된" | 0 | |
NaN | "NaN" | 그릇된 | |
빈 문자열 | 0 | 그릇된 | |
"" | 0 | 참된 | |
"2.4"(숫자) | 2.4 | 참된 | |
"테스트"(숫자가 아님) | NaN | 참된 | |
"0" | 0 | 참된 | |
"1" | 1 | 참된 | |
-0 | "0" | 그릇된 | |
0 | "0" | 그릇된 | |
1 | "1" | 참된 | |
무한대 | "무한대" | 참된 | |
-무한대 | "-무한대" | 참된 | |
[] | "" | 0 | 참된 |
[삼] | "삼" | 삼 | 참된 |
['에이'] | "에이" | NaN | 참된 |
[ 'a', 'b'] | "a, b" | NaN | 참된 |
{} | "[object Object]" | NaN | 참된 |
기능(){} | "기능(){}" | NaN | 참된 |
굵게 표시된 값은 프로그래머가 놀라는 것을 알 수있는 변환을 강조합니다.
명시 적 값을 변환하려면 String ()을 사용할 수 있습니다. Number () Boolean ()