2012-02-22 7 views
2

単純な数値(IE:1.00,1000.00,10000.00)を含む2つのセルを持つテーブルがあります。私は、以下の 'format'関数を使用してセルの内容をフォーマットしようとしています。私はこの関数をコードの別の領域で成功させましたが、テーブルセルの内容をフィードしようとすると何らかの理由で(私がここにいる理由)、期待どおりに動作しません。なぜ型変数がオブジェクトで、数字ではないのですか

問題は、セルの内容の型が '数値'ではなく 'オブジェクト'であるため、if文でスケートして元の値を返すだけです。データを型番に強制する方法はありますか?私はvar n = new Number(cellText);がそのトリックをやろうと思ったが、typeofがオブジェクトとして戻ってくる。混乱している。 globalize.jsで

:私のページで

Globalize.format = function(value, format, cultureSelector) { 
    culture = this.findClosestCulture(cultureSelector); 
    if (value instanceof Date) { 
     value = formatDate(value, format, culture); 
    } 
    else if (typeof value === "number") { 
     value = formatNumber(value, format, culture); 
    } 
    return value; 
}; 

$(document).ready(function() { 
    $('td[globalize="true"]').each(function() { 
     var $this = $(this); 
     var cellText = $this.text(); 
     if (cellText != null) { 
      var n = new Number(cellText); 
      var v = Globalize.formatNumber(n, _gloNum[0]); 
      $this.text(v); 
     } 
    }) 
}); 

答えて

5

問題は、私のセルの内容typeof演算あなたが行うと 'オブジェクト' としませ '番号'

であるということである:あなたが作成している

new Number 

新しいオブジェクトのインスタンスです。そのため、オブジェクトであり番号ではありません。

データを型番に強制する方法はありますか?

var n = +(cellText); 

それとも

var n = Number(cellText); 
+0

これは素晴らしい、感謝しました! – HashTagDevDude

+0

@hyperflow:あなたは歓迎です – Sarfraz

+0

これは最高の答えです。数値プリミティブに正しくキャストする方法を正しく示しています。 'new Number'を使わないのが最善です。 – benekastah

4

のJavaScript new NumberではNumberオブジェクトを返します。 parseFloatまたはparseIntをご覧ください。

変更:

var n = new Number(cellText); 

D

var n = Number(cellText); 

それとも

var n = parseFloat(cellText); 

それとも

var n = parseInt(cellText, 10); 

へあなたが必要とするものに恵まれています。

2

new Number(cellText)Numberオブジェクトではなくプリミティブnumberを返します。

parseIntまたはparseFloatを代わりに使用してください。

var cellText = '12.34', 
a = new Number(cellText), // 12.34, but a Number object 
b = parseInt(cellText, 10), // 12 
c = parseFloat(cellText); // 12.34 

typeof a; // 'object' 
a instanceof Number; // true 

typeof b; // 'number' 
typeof c; // 'number' 
0

typeofはJavaScriptでバグがあります。代わりに次の関数を使用することをお勧めします:

function typeOf(value) { 
    if (value === null) return "null"; 
    else if (typeof value === "undefined") return "undefined"; 
    else return Object.prototype.toString.call(value).slice(8, -1); 
}