Math.sign() 関数は、引数として与えた数が正、負、0 のどれであるか示す符号を返します。

構文

Math.sign(x)

引数

x
数値です。

戻り値

与えられた引数の符号を表す数値です。引数が正の値の場合、負の値の場合、正の 0 や負の 0 の場合、この関数はそれぞれ 1-10-0 を返します。そうでない場合は NaN を返します。

説明

sign()Math オブジェクトの静的なメソッドなので、自ら生成した Math オブジェクトのメソッドとせずに、常に Math.sign() として使用してください( Math オブジェクトにはコンストラクタがありません)。

この関数は 5 種類の返り値があります。1-10-0NaN。それぞれ、"正"、"負"、"正 0"、"負 0"、NaN を表します。

この関数に渡された引数は暗黙のうちに number 型に変換されます。

Math.sign() を使う

Math.sign(3);     //  1
Math.sign(-3);    // -1
Math.sign('-3');  // -1
Math.sign(0);     //  0
Math.sign(-0);    // -0
Math.sign(NaN);   // NaN
Math.sign('foo'); // NaN
Math.sign();      // NaN

Polyfill

if (!Math.sign) {
  Math.sign = function(x) {
    // If x is NaN, the result is NaN.
    // If x is -0, the result is -0.
    // If x is +0, the result is +0.
    // If x is negative and not -0, the result is -1.
    // If x is positive and not +0, the result is +1.
    return ((x > 0) - (x < 0)) || +x;
    // A more aesthetical persuado-representation is shown below
    //
    // ( (x > 0) ? 0 : 1 )  // if x is negative then negative one
    //          +           // else (because you cant be both - and +)
    // ( (x < 0) ? 0 : -1 ) // if x is positive then positive one
    //         ||           // if x is 0, -0, or NaN, or not a number,
    //         +x           // Then the result will be x, (or) if x is
    //                      // not a number, then x converts to number
  };
}

上記の polyfill では (x > 0) と (x < 0) の数値を互いに減算することで、真偽値から数値型へ強制的に型変換されるため、追加の型強制は必要ありません。

仕様

仕様 ステータス コメント
ECMAScript 2015 (6th Edition, ECMA-262)
Math.sign の定義
標準 初期定義
ECMAScript Latest Draft (ECMA-262)
Math.sign の定義
ドラフト  

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
signChrome 完全対応 38Edge 完全対応 12Firefox 完全対応 25IE 未対応 なしOpera 完全対応 25Safari 完全対応 9WebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 25Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 0.12

凡例

完全対応  
完全対応
未対応  
未対応

関連情報

ドキュメントのタグと貢献者

このページの貢献者: mdnwebdocs-bot, segayuu, SphinxKnight, dskmori, shide55
最終更新者: mdnwebdocs-bot,