요약
지금은 3가지 방법 밖에 생각이 안 나네요. 독자들이 다른 유용한 방법을 생각한다면 공유할 수도 있습니다
parseInt
비트 연산자
Math.floor Math.ceil
설명
1.ParseInt
1. 예시
parseInt("13nash");//13 parseInt("")// NaN parseInt("0xA") //10(十六进制) parseInt(" 13")//13 parseInt("070")//ES3为56(八进制) ES5为70 parseInt(070)//ES3和ES5都为56 parseInt(22.5)//22
2. 변환 규칙:
(1) 예제 (1)에 따르면, parsInt는 숫자가 아닐 때까지 구문 분석하고 중지합니다
(2) 예제 (2)에 따르면, 빈 문자열을 구문 분석할 때 parsInt는 0이 아닌 NaN입니다
(3) 예제 (3)에 따르면,parseInt는 16진수를 10진수로 변환할 수 있습니다
(4) 예제 (4)에 따르면,parseInt는 문자열
3. 단점:
(1). 예제 (5)에 따르면 8진수 배열을 변환할 때parseInt가 호환되지 않음을 알 수 있습니다. ES3는 070을 8진수 값으로 처리하지만 ES5는 070을 10진수 값으로 처리합니다.
(2) 예제 (6) (7)에 따르면, parsInt는 먼저 매개변수를 문자열로 변환한 다음 이를 정수로 실행한다는 것을 알 수 있습니다
4. 설명: (5)와 (6)의 실행은 모두 070을 정수로 변환하는데 결과가 다른 이유는 무엇입니까? 이는 단점을 어떻게 해결하느냐에 있어서 두 번째 포인트이기도 하다.
공식 문서에서 문자열이 문자열이 아니면 문자열로 변환된다는 것을 봤기 때문입니다. 이 구절. 즉, 매개변수가 문자열이 아닌 경우 먼저 이를 문자열로 변환한 다음 정수로 변환합니다. 예를 들어, 예제 (6)의 parseInt(070)는 실제로 070을 문자열로 변환합니다. 070이 8진수이기 때문에 070 "" 또는 String(070)을 시도하여 070이 "56"으로 변환된다는 것을 알 수 있습니다. 그런 다음 이는parseInt("56")이 되고 최종 정수는 56입니다. ES3이든 ES5이든 56
2. 비트 연산자
1. 예시
console.log(0 | "123.45")//123 console.log(0 | 123.45)//123 console.log(0 ^ 123.45)//123 console.log(~~123.45)//123
2. 원리: JavaScript에는 정수 개념이 없으며 모든 숫자 유형은 배정밀도 부동 소수점 숫자입니다. 비트 연산자를 사용할 때 먼저 피연산자를 정수로 변환하여 연산을 용이하게 합니다. 하지만 0을 다른 값과 XOR하거나 비트별 OR을 하면 연산값이 바뀌지 않습니다
3. Math.floor와 Math.ceil
1. 예시
console.log(Math.floor(2.3)//2 console.log(Math.floor(-2.3)//-3 console.log(Math.ceil(2.3)//3 console.log(Math.ceil(-2.3)//-2
2. 두 가지로는 충분하지 않습니다. Math.floor는 숫자 중 가장 작은 정수를 가져오고 Math.ceil은 가장 큰 정수를 가져옵니다. 따라서 -2.3을 반올림하면 -2가 되지만 Math.floor를 사용하면 -3이 됩니다. 그리고 2.3은 Math.ceil을 사용하여 3을 얻지만 우리가 원하는 것은 2입니다.
3.
//自行定义一个函数 function getInt(val){ return val>0 ? Math.floor(val):Math.ceil(val); }