簡體   English   中英

Javascript 負數

[英]Javascript negative number

我想檢查一個數字是否為負數。 我正在尋找最簡單的方法,因此預定義的 javascript 函數將是最好的,但我還沒有找到任何東西,這是我目前所擁有的,但我認為這不是一個好方法:

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

您應該能夠使用以下表達式,而不是編寫一個函數來執行此檢查:

(number < 0)

Javascript 將首先嘗試將左側轉換為數字值,然后檢查它是否小於零來評估此表達式,這似乎是您想要的。


規格和細節

x < y的行為在§11.8.1 小於運算符 ( < ) 中指定,它使用§11.8.5 抽象關系比較算法

如果xy都是字符串,情況就會大不相同,但由於右側已經是(number < 0) ,因此比較將嘗試將左側轉換為要進行數字比較的數字。 如果左側無法轉換為數字,則結果為false

請注意,與基於正則表達式的方法相比,這可能會產生不同的結果,但取決於您嘗試做什么,它最終可能會做正確的事情。

  • "-0" < 0false ,這與-0 < 0也是false的事實一致(請參閱: signed zero )。
  • "-Infinity" < 0true (確認無窮大)
  • "-1e0" < 0true (接受科學記數法文字)
  • "-0x1" < 0true (接受十六進制文字)
  • " -1 " < 0true (某些形式的空格是允許的)

對於上面的每個示例,正則表達式方法的計算結果都是相反的( true而不是false ,反之亦然)。

參考

也可以看看


附錄 1:條件運算符?:

還應該說這種形式的陳述:

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

可以重構為使用三元/條件?:運算符(第11.12 節)來簡單地:

return (someCondition) ? valueForTrue : valueForFalse;

?:慣用用法可以使代碼更簡潔易讀。

相關問題


附錄二:類型轉換函數

Javascript 具有您可以調用以執行各種類型轉換的函數。

類似於以下內容:

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

可以使用?:運算符重構為:

return (someVariable ? true : false);

但您也可以進一步簡化為:

return Boolean(someVariable);

這將調用Boolean作為函數(第15.16.1 節)來執行所需的類型轉換。 您可以類似地將Number作為函數調用(第15.17.1 節)來執行到數字的轉換。

相關問題

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

您的正則表達式應該適用於字符串數字,但這可能更快。 (根據上述類似答案中的評論進行編輯,不需要使用+n轉換。)

這是一個老問題,但它有很多觀點,所以我認為更新它很重要。

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部分是將字符串轉換為數字。

在 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

如果你真的想深入研究它,甚至需要區分-00 ,這里有一種方法可以做到。

function negative(number) {
  return !Object.is(Math.abs(number), +number);
}

console.log(negative(-1));  // true
console.log(negative(1));   // false
console.log(negative(0));   // false
console.log(negative(-0));  // true

一個很好的方法也可以檢查正面和負面...

function ispositive(n){
    return 1/(n*0)===1/0
}

console.log( ispositive(10) )  //true
console.log( ispositive(-10) )  //false
console.log( ispositive(0) )  //true
console.log( ispositive(-0) )  //false

本質上是將Infinity-Infinity進行比較,因為0===-0// true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM