자바스크립트에서 실수를 정수형으로 바꿀 때, 주로 Math의 round(), floor(), ceil() 함수들을 이용했습니다.
그런데, 우연히 실수형 변수에 "| 0"을 하는 문법을 보고 도대체 무엇을 하는 코드인지 동작시켜 봤는데, 이게 물건이었습니다.
바로 다음 실행 결과를 보시면 이해가 빠르실 겁니다.
>> 1.10 // === Math.floor(1.1)
1
>> -1.10 // === Math.ceil(-1.1)
-1
>> 9.90 // === Math.floor(9.9)
9
>> -9.90 // === Math.ceil(-9.9)
-9
즉, 실수에 "| 0" 연산을 하면 0보다 작은 음수일 경우에는 ceil() 함수처럼 동작하고 0보다 큰 실수는 floor() 함수처럼 동작합니다.
풀어서 설명드리자면, 실수의 소수점 부분을 버리고 정수 부분만 취한다고 생각하시면 조금더 이해가 쉽습니다. 문자열로 생각한다면, "." 문자를 포함한 이후는 버리는 셈입니다.
shuffleArray() 함수에서 "| 0" 연산을 이용하는 것을 보고 무릎을 탁 쳤습니다. ^^
function shuffleArray( array ){
var count = array.length,
randomnumber,
temp;
while( count ){
randomnumber = Math.random() * count-- | 0; // cast int ; remove decimal
temp = array[count];
array[count] = array[randomnumber];
array[randomnumber] = temp
}
}
참고자료
- "How to randomize (shuffle) a JavaScript array?":https://stackoverflow.com/questions/2450954/
728x90
반응형
'프로그래밍 > Node.js' 카테고리의 다른 글
[javascript] Intl.DateTimeFormat 클래스 이용 시, 발생한 RangeError (0) | 2024.06.03 |
---|---|
[NodeJS] readFile, readFileSync - 리눅스와 윈도우간 차이점 (0) | 2023.11.19 |
[javascript] 배열 순서를 마구 뒤섞기(shuffle) (0) | 2023.11.06 |
[nodejs] 구글 2FA 인증을 통한 SMTP 메일 발송 오류 해결기 (0) | 2022.10.19 |
[nodejs] VSCode 디버그 콘솔에 winston 로그가 출력되지 않는 문제 (0) | 2022.08.04 |