-
-
Save deepsweet/991548 to your computer and use it in GitHub Desktop.
// var type = | |
function( | |
a // target | |
){ | |
return a == null ? // if null or undefined | |
a + '' : // then convert it to string | |
toString.call(a) // else call Object.prototype.toString method | |
.slice(8, -1) // '[object Array]' -> 'Array' | |
.toLowerCase() // 'Array' -> 'array' | |
} | |
// type([]) === 'array' | |
// type({}) === 'object' | |
// type('') === 'string' | |
// type(1) === 'number' | |
// type(true) === 'boolean' | |
// type(function(){}) === 'function' | |
// type(null) === 'null' | |
// type(undefined) === 'undefined' |
function(a){return a==null?a+'':toString.call(a).slice(8,-1).toLowerCase()} |
Copyright (c) 2011 Kir Belevich, http://soulshine.in | |
Permission is hereby granted, free of charge, to any person obtaining | |
a copy of this software and associated documentation files (the | |
"Software"), to deal in the Software without restriction, including | |
without limitation the rights to use, copy, modify, merge, publish, | |
distribute, sublicense, and/or sell copies of the Software, and to | |
permit persons to whom the Software is furnished to do so, subject to | |
the following conditions: | |
The above copyright notice and this permission notice shall be | |
included in all copies or substantial portions of the Software. | |
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | |
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | |
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | |
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
{ | |
"name": "type", | |
"keywords": ["typeof", "type", "isArray"] | |
} |
as i see there is no need to a==null?a+''
, toString
works fine with null
by default.
toString.call(null) === "[object global]" // true
toString.call(undefined) === "[object global]" // true
that's strange, because i have both false
in Chrome, Safari, Firefox and Opera.
i corrected the capitalization, so try again!
still getting false
, already tried capitalizations.
i think we need to get back {}.
, looks like we have a different global
in our tests.
please try ({}).toString.call(undefined) === "[object global]"
what strings do the above return for you when you remove the equality check?
({}).toString.call(undefined)
"[object Undefined]"
({}).toString.call(null)
"[object Null]"
oops.
it's not so crossbrowser o_O, sorry.
your variant with a==null?a+''
works fine.
i think this is as good as it gets! maybe rename it to type
to avoid confusion with the native operator?
you're right. renamed.
This will break in at least IE < 9 and isn't consistent for some objects in at least FF5. Using the window.toString
should be ok
on paper but isn't in practice. You should stick with {}.toString.call(...)
.
lotta room left, how about normalizing case and adding support for
null
andundefined
?