Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

checking type?

0 views
Skip to first unread message

Robert Mark Bram

unread,
Sep 10, 2003, 8:02:48 AM9/10/03
to
Howdy All!

How can you tell the type of an object?

I am not talking about using "typeof" ..

I am talking about being able to determine if an object is a Date or String
...

Thanks for any advice!

Rob
:)


Janwillem Borleffs

unread,
Sep 10, 2003, 8:38:16 AM9/10/03
to

"Robert Mark Bram" <rober...@yourshoesinfotech.monash.edu.au> schreef in
bericht news:3f5f12cc$0$4187$afc3...@news.optusnet.com.au...

> Howdy All!
>
> How can you tell the type of an object?
>
> I am not talking about using "typeof" ..
>
> I am talking about being able to determine if an object is a Date or
String
> ...
>

You could test for methods:

function test (obj) {
var type = typeof obj;
if (type == 'object') {
if (obj.getDate) return 'Date';
if (obj.split) return 'String';
return object;
}
return type;
}

alert(test('test')); // Alerts 'string'
alert(test(new String('test'))); // Alerts 'String';
alert(test(new Date())); // Alerts 'Date';


JW

Janwillem Borleffs

unread,
Sep 10, 2003, 8:40:21 AM9/10/03
to

"Janwillem Borleffs" <j...@jwbfoto.demon.nl> schreef in bericht
news:3f5f1b3a$0$28895$1b62...@news.euronet.nl...

>
> function test (obj) {
> var type = typeof obj;
> if (type == 'object') {
> if (obj.getDate) return 'Date';
> if (obj.split) return 'String';
> return object;
> }
> return type;
> }
>

Typo here, the statement:
return object;

should be:
return 'object';

JW

Janwillem Borleffs

unread,
Sep 10, 2003, 9:11:48 AM9/10/03
to

"Janwillem Borleffs" <j...@jwbfoto.demon.nl> schreef in bericht
news:3f5f1bb2$0$28889$1b62...@news.euronet.nl...

>
> "Janwillem Borleffs" <j...@jwbfoto.demon.nl> schreef in bericht
> news:3f5f1b3a$0$28895$1b62...@news.euronet.nl...
> >
> > function test (obj) {
> > var type = typeof obj;
> > if (type == 'object') {
> > if (obj.getDate) return 'Date';
> > if (obj.split) return 'String';
> > return object;
> > }
> > return type;
> > }
> >
>

And to make it more compact:

function test (obj) {
var type = typeof obj;
if (type == 'object') {
if (obj.getDate) return 'Date';
if (obj.split) return 'String';
}

return type;
}


:-)

JW

Martin Honnen

unread,
Sep 10, 2003, 9:13:23 AM9/10/03
to

Robert Mark Bram wrote:
> Howdy All!
>
> How can you tell the type of an object?
>
> I am not talking about using "typeof" ..
>
> I am talking about being able to determine if an object is a Date or String
> ...

The strings you encounter in JavaScript are not usually objects at all
but primitive string values. And
typeof varName == 'string'
tells you whether something is a string value.
As for Date objects
if (typeof varName == 'object' && varName.constructor == Date)

--

Martin Honnen
http://JavaScript.FAQTs.com/

Lasse Reichstein Nielsen

unread,
Sep 10, 2003, 12:04:06 PM9/10/03
to
"Robert Mark Bram" <rober...@yourshoesinfotech.monash.edu.au> writes:

> How can you tell the type of an object?

> I am not talking about using "typeof" ..

Yes, that would just give "object".

> I am talking about being able to determine if an object is a Date or String

All built in constructors (String, Boolean, Number, Array, Date, RegExp, etc.)
have a prototype with a property called "constructor" that points to itself.

That is
var x = new String("foo");
alert(x.constructor == String);
alerts true. You can use this to recognize the objects constructed by these
constructors *unless* someone fiddled with the constructor property. There
is nothing that prevents you from doing:
String.prototype.constructor = Array
(except common sense). So, the method is not fool proof, if the fools are
too inventive.

/L
--
Lasse Reichstein Nielsen - l...@hotpop.com
Art D'HTML: <URL:http://www.infimum.dk/HTML/randomArtSplit.html>
'Faith without judgement merely degrades the spirit divine.'

Richard Cornford

unread,
Sep 10, 2003, 4:03:29 PM9/10/03
to
"Janwillem Borleffs" <j...@jwbfoto.demon.nl> wrote in message
news:3f5f2312$0$28891$1b62...@news.euronet.nl...
<snip>

> function test (obj) {
> var type = typeof obj;
> if (type == 'object') {
> if (obj.getDate) return 'Date';
> if (obj.split) return 'String';
> }
> return type;
> }

If - obj - happened to be - null - then - type - would still be "object"
but the property testing would cause errors. Maybe:-

if((obj)&&(type == 'object')){

- would be safer.

Richard.


Douglas Crockford

unread,
Sep 10, 2003, 4:07:16 PM9/10/03
to
> If - obj - happened to be - null - then - type - would still be "object"
> but the property testing would cause errors. Maybe:-
>
> if ((obj) && (type == 'object')){

Yup. I put stuff like that into so functions. For example,

function isFunction(a) {
return typeof a == 'function';
}
function isNull(a) {
return typeof a == 'object' && !a;
}
function isNumber(a) {
return typeof a == 'number' && isFinite(a);
}
function isObject(a) {
return (typeof a == 'object' && a) || isFunction(a);
}

I find that typeof's own understanding of types is too fuzzy.

http://www.crockford.com/javascript/remedial.html

Keith Bowes

unread,
Sep 10, 2003, 6:21:21 PM9/10/03
to
Robert Mark Bram wrote:
> Howdy All!
>
> How can you tell the type of an object?
>
> I am not talking about using "typeof" ..
>
> I am talking about being able to determine if an object is a Date or String
> ...
>

You can use the instanceof operator:
var now = new Date();
alert(now instanceof Date);


0 new messages