web-dev-qa-db-ja.com

Javascriptの負の数

数値が負かどうかを確認したい。私は最も簡単な方法を探しているので、事前定義されたjavascript関数が最適ですが、まだ何も見つかりませんでした。良い方法:

  function negative(number) { 
        if (number.match(/^-\d+$/)) {
            return true;
        } else {
            return false;
        }
   }
56
Adam

このチェックを行う関数を作成する代わりに、次の式を使用することができます。

(number < 0)

Javascriptは、この式を評価します。最初に左側が数値に変換されてから、ゼロより小さいかどうかがチェックされます。


仕様と詳細

x < yの動作は、§11.8.1で指定されます。小なり演算子(<は、§11.8.5抽象関係比較アルゴリズム

xyの両方が文字列の場合、状況は大きく異なりますが、右側はすでに(number < 0)の数値であるため、比較は左側を変換しようとします数値的に比較される数値の側面。左側を数値に変換できない場合、結果はfalseになります。

これは正規表現ベースのアプローチと比較すると異なる結果をもたらす可能性がありますが、何をしようとしているのかによっては、とにかく正しいことをすることになります。

  • "-0" < 0falseです。これは、-0 < 0falseであるという事実と一致しています(参照: signed zero )。
  • "-Infinity" < 0trueです(無限大が確認されます)
  • "-1e0" < 0trueです(科学表記リテラルが受け入れられます)
  • "-0x1" < 0trueです(16進リテラルが受け入れられます)
  • " -1 " < 0trueです(いくつかの形式の空白が許可されます)

上記の例のそれぞれについて、正規表現メソッドは逆に評価されます(trueの代わりにfalse、またはその逆)。

参照資料

こちらもご覧ください


付録1:条件演算子?:

また、この形式のステートメントは次のように言う必要があります。

if (someCondition) {
   return valueForTrue;
} else {
   return valueForFalse;
}

三項/条件付き?:演算子( §11.12 )を使用して単純にリファクタリングできます。

return (someCondition) ? valueForTrue : valueForFalse;

?:を慣用的に使用すると、コードがより簡潔で読みやすくなります。

関連する質問


付録2:型変換関数

Javascriptには、さまざまな型変換を実行するために呼び出すことができる関数があります。

次のようなもの:

if (someVariable) {
   return true;
} else {
   return false;
}

?:演算子を使用してリファクタリングできます。

return (someVariable ? true : false);

ただし、これを次のようにさらに単純化することもできます。

return Boolean(someVariable);

これは、Booleanを関数として呼び出し( §15.16.1 )、目的の型変換を実行します。同様に、Numberを関数として呼び出して( §15.17.1 )、数値への変換を実行できます。

関連する質問

283
function negative(n) {
  return n < 0;
}

正規表現は文字列番号に対して正常に機能するはずですが、これはおそらくより高速です。 (上記の同様の回答のコメントから編集、+nは不要です。

12
bcherry

これは古い質問ですが、多くの意見がありますので、更新することが重要だと思います。

ECMAScript 6は関数Math.sign()をもたらしました。これは、数値の符号(正の場合は1、負の場合は-1)または数値でない場合はNaNを返します。 参照

次のように使用できます。

var number = 1;

if(Math.sign(number) === 1){
    alert("I'm positive");
}else if(Math.sign(number) === -1){
    alert("I'm negative");
}else{
    alert("I'm not a number");
}

次のような単純なものはどうですか?

function negative(number){
    return number < 0;
}

* 1パートは、文字列を数値に変換することです。

3
Wolph

ES6では、Math.sign関数を使用して、

1. its +ve no
2. its -ve no
3. its zero (0)
4. its NaN


console.log(Math.sign(1))        // prints 1 
console.log(Math.sign(-1))       // prints -1
console.log(Math.sign(0))        // prints 0
console.log(Math.sign("abcd"))   // prints NaN
1
JTeam