Math.sign: JavaScript에서 숫자가 양수인지 음수인지 확인하는 방법



이제 ES6의 Math.sign을 사용하여 숫자의 부호를 결정하는 것이 매우 쉽습니다 👏 숫자가 양수인지, 음수인지 또는 0인지 나타냅니다.

const positive = 5;
const negative = -5;
const zero = 0;

Math.sign(positive); // 1
Math.sign(negative); // -1
Math.sign(zero); // 0

Math.sign 반환 값


Math.sign()에는 5개의 가능한 반환 값이 있습니다.

1 // positive number
-1 // negative number
0 // positive zero
-0 // negative zero
NaN // not a number



Math.sign(8); // 1
Math.sign(-8); // -1

Math.sign(0); // 0
Math.sign(-0); // -0

Math.sign(NaN); // NaN
Math.sign('hello'); // NaN
Math.sign(); //NaN

이 함수에 전달된 인수는 암시적으로 number 유형으로 변환됩니다.

Math.sign 잡았다



일반적인 문제는 Math.sign가 변환된 인수 값을 반환한다고 생각하는 것입니다. Math.sign는 숫자의 부호만 반환합니다. 값을 반환하지 않습니다.

Math.sign(-8);

// ✅ return -1
// ❌ It doesn't return -8

Math.sign 대 비교 연산자



커뮤니티에서 좋은 질문을 받았습니다.

Why use Math.sign when I can use the comparative operator?



if (number > 0) {
  // Positive
} else {
  // Negative
}

~ 대

if (Math.sign(number) > 0) {
  // Positive
} else {
  // Negative
}

실제로 부울 상태를 확인하는 경우 Math.sign 대신 비교 연산자를 사용합니다. 그러나 Math.sign가 빛나는 곳은 숫자 값을 반환한다는 것입니다. 즉, 계산을 할 수 있습니다.

const number = 5;

number > 0; // true
Math.sign(number); // 1

Math.sign으로 알고리즘 문제 해결



따라서 이 알고리즘 문제를 해결할 수 있습니다. "정수 반전"

Input: 123;
Output: 321;

Input: -123;
Output: -321;



function reverseInteger(num) {
  const numArray = Math.abs(num) // Get the absolute value of our number > 321
    .toString() // Convert our number to a string > '321'
    .split('') // Convert our string of numbers to an array > [3, 2, 1]
    .reverse() // Reverse our array of numbers > [1, 2, 3]
    .join(''); // Convert our array back to a string > 123

  const sign = Math.sign(num); // -1
  return numArray * sign;
  // Multiply our reverse string with the sign will produce the correct reverse number
}

reverseInteger(-321); // -123

이 알고리즘 질문은 Leetcode의 "Reverse an Integer"에서 가져온 것입니다. 데모를 단순화하기 위해 질문의 요구 사항을 편집했습니다. 실제 솔루션을 보려면 @loia5tqd001의 솔루션이 있습니다.

사실 이 기능을 처음 알게 된 건 이때다. 그래서 다른 사람의 솔루션을 보는 것을 좋아합니다. 다른 사람들이 무언가를 해결하는 방식은 항상 흥미롭습니다. 솔루션이 나쁘더라도 저도 읽어요. 피해야 할 사항을 가르쳐 주니까요 😉. 지식이 낭비되지 않습니다 💪. 모두 내 툴킷을 확장하고 있습니다. 학습 기계와 마찬가지로 더 많은 데이터를 제공할수록 더 좋아집니다. 제 뇌도 그런 ​​것 같아요. 내가 좋아지려면 해결책을 많이 봐야해 😄

그렇기 때문에 많은 정보에서 무언가를 해결하는 다양한 방법을 다루고 있습니다. BEST 함수는 절대 없기 때문입니다. 가장 좋은 방법은 항상 상황에 따라 다릅니다. 툴킷이 클수록 최상의 방법을 찾을 확률이 높아집니다 👍

네거티브 제로



따라서 Math.sign가 음수 0을 반환한다는 것을 알 수 있습니다.

Math.sign(0); // 0
Math.sign(-0); // -0

그리고 다음 질문은 이 음수 0 🤨이 도대체 무엇인지입니다. "You Don't Know JS"의 Kyle Simpson이 가장 잘 설명합니다.

Now, why do we need a negative zero, besides academic trivia?

There are certain applications where developers use the magnitude of a value to represent one piece of information (like speed of movement per animation frame) and the sign of that number to represent another piece of information (like the direction of that movement).

In those applications, as one example, if a variable arrives at zero and it loses its sign, then you would lose the information of what direction it was moving in before it arrived at zero. Preserving the sign of the zero prevents potentially unwanted information loss.



YDKJS - Type & Grammer - Zeros

Math.sign 브라우저 지원



모든 최신 브라우저에 대한 지원이 훌륭합니다. 불행하게도 Internet Explorers는 나머지 클래스와 함께 플레이하기에는 너무 힙합니다. 그래서 거기에 대한 지원이 없습니다.


브라우저



크롬


파이어폭스


원정 여행


가장자리


인터넷 익스플로러



MDN Browser Compatibility Chart

IE용 코드 Tidbit



하지만 걱정하지 마세요. 여기 대체 코드 스니펫이 있습니다. 이것은 Internet Explorer 및 이전 브라우저에서 작동합니다 👍

const positive = 5;
const negative = -5;
const zero = 0;

positive === 0 ? positive : positive > 0 ? 1 : -1; // 1
negative === 0 ? negative : negative > 0 ? 1 : -1; // -1
zero === 0 ? zero : zero > 0 ? 1 : -1; // 0

Math.sign 폴리필



또는 Math.sign를 계속 사용하고 이것을 추가하십시오 Polyfill from MDN

if (!Math.sign) {
  Math.sign = function(x) {
    return (x > 0) - (x < 0) || +x;
  };
}

자원


  • MDN Web Docs - Math.sign()
  • Stack Overflow: Number sign in JavaScript
  • Leetcode Solution: Reverse an integer
  • Math.sign MDN Polyfill
  • Stack Overflow: How to check the value given is a positive or negative integer?
  • Stack Overflow: JS Negative Number
  • 원래 게시 위치: www.samanthaming.com

  • 읽어주셔서 감사합니다 ❤
    안녕하세요! | | SamanthaMing.com

    좋은 웹페이지 즐겨찾기