2012-02-22 2 views
2

У меня есть таблица, которая содержит пару ячеек, которые содержат простые числа (IE: 1.00, 1000.00, 10000.00). Я пытаюсь отформатировать содержимое ячейки, используя функцию «format» ниже. У меня был успех с этой функцией в другой области моего кода, но по какой-либо причине (причина, по которой я здесь), когда я пытаюсь передать содержимое ячеек таблицы, она не работает, как я ожидал.Почему typeof моя переменная является объектом, а не числом

Проблема в том, что тип содержимого моей ячейки - это «объект», а не «номер», поэтому он скатывается вправо с помощью оператора 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

Это лучший ответ. Он правильно показывает, как правильно направить числовой примитив. Лучше никогда не использовать «новый номер». – benekastah

4

В JavaScript new Number возвращает Number объект. Посмотрите на parseFloat или parseInt.

Изменение:

var n = new Number(cellText); 

Для

var n = Number(cellText); 

Или

var n = parseFloat(cellText); 

Или

var n = parseInt(cellText, 10); 

D спасаясь за то, что вам нужно.

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); 
} 
Смежные вопросы