Почему эта функция не может оценить тип данных данного аргумента? - PullRequest
0 голосов
/ 19 апреля 2011
function isDataType(dataType, obj) {
    return Object.prototype.toString.call(obj) == '[object' + dataType + ']';
}

var arr = [];

alert(isDataType("Array", arr)); // alerts 'false' which is false

Когда я делаю obj равным массиву и делаю тип данных для оценки как массива, он все равно говорит false. Есть ли способ это исправить? Благодаря.

Ответы [ 5 ]

2 голосов
/ 19 апреля 2011

Да - не используйте этот метод для поиска типов данных при поиске типов данных массивов.Вместо этого используйте arr instanceof Array.

1 голос
/ 19 апреля 2011

Вам не хватает пробела после '[object.Ваш код должен затем оценить как истинное.

Вы должны использовать instanceof, чтобы узнать, относится ли объект к определенному типу.

1 голос
/ 19 апреля 2011

Тебе просто не нужно другое место?

'[object ' + dataType + ']'
        ^-- a space here

Это не очень хороший метод для тестирования типов данных, как уже упоминали другие.

0 голосов
/ 19 апреля 2011
function whatsit(what){
    if(what== null) return String(what);
    what= what.constructor;
    var Rx=  /function\s+([^(\s]+)\s*\(/, 
    tem= String(what).match(Rx);
    if(tem) return tem[1];
    return String(what);
}
0 голосов
/ 19 апреля 2011
function is(type, obj) {
    var clas = Object.prototype.toString.call(obj).slice(8, -1);
    return obj !== undefined && obj !== null && clas === type;
}

is('String', 'test'); // true
is('String', new String('test')); // true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...