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
:)
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
Typo here, the statement:
return object;
should be:
return 'object';
JW
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
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/
> 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.'
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.
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.
You can use the instanceof operator:
var now = new Date();
alert(now instanceof Date);