JavaScript instanceof: не может определить, какой экземпляр аргумента функции - PullRequest
4 голосов
/ 23 декабря 2011

Я все еще изучаю JavaScript, читаю книги, использую FireBug, экспериментирую.

Я поражен и застрял на предмете ниже.

Имею объявление функции:

    var t = function (args){
            ...
    }

Предполагается, что это varargs.

Я называю это так:

<body onload="t({to:100,from:0})">

Можно получить from значение аргумента, вызвав:

args.from

Результат typeof args.from равен number
Это выглядит вменяемым.
обратите внимание: number в нижнем регистре

Меня интересуетчто такое экземпляр args.from.
На самом деле, не может получить значение экземпляра.
пробовал:

args.from instanceof Number
args.from instanceof String
args.from instanceof Object
args.from instanceof Boolean

Это не Number - очень странно
Это не Object - довольно странно
Это не String - это нормально
Это не Boolean - это нормально
Это ни null, ни 'undefined' - выглядит нормально.

Что это?

Ответы [ 2 ]

5 голосов
/ 23 декабря 2011

Это примитивное числовое значение.
Это не экземпляр какого-либо класса.

instanceof может возвращать true только для объектов (для которых typeof возвращает "object" или "function").

Это не имеет ничего общего с args объектом ; Вы можете получить такую ​​же ложь от 4 instanceof Number.

Напротив, new Number(4) - это объект, охватывающий примитив 4, поэтому typeof new Number(4) === "object и new Number(4) instanceof Number === true

2 голосов
/ 23 декабря 2011

Как уже было сказано, from.to является примитивным типом, поэтому вы не можете вызвать instanceof для него.

Если вы действительно хотите использовать instanceof вместо typeof, поместите егоObject:

var from = Object(args.from);
alert(from instanceof Number);   // true!
...