https://github.com/dawsbot/to-type
The way typeof should be
https://github.com/dawsbot/to-type
Last synced: about 1 year ago
JSON representation
The way typeof should be
- Host: GitHub
- URL: https://github.com/dawsbot/to-type
- Owner: dawsbot
- License: mit
- Created: 2016-03-11T03:47:10.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2022-04-06T18:17:38.000Z (about 4 years ago)
- Last Synced: 2024-11-11T01:52:39.560Z (over 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 17.6 KB
- Stars: 16
- Watchers: 3
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- Contributing: .github/contributing.md
- License: license
Awesome Lists containing this project
README
# to-type
> The way typeof should be
[](https://www.npmjs.com/package/to-type)
[](http://npmjs.org/to-type)
[](https://github.com/sindresorhus/xo)
A JavaScript implementation of [angus-c](https://github.com/angus-c)'s [Fixing the JavaScript typeof operator](https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/).
## Install
#### Node
```
npm install --save to-type
```
#### Web
```html
```
Alternatively, you can install the npm module and reference the bundle within `node_modules`
```html
```
## Usage
```js
// Remove this require line if you're using the web bundle (it's already bundled as "to-type")
const to-type = require('to-type');
toType([1, 2, 3]);
//=> 'array'
toType(/a-z/);
//=> 'regexp'
toType(new Number(4));
//=> 'number'
toType(new String('abc'));
//=> 'string'
```
## About
JavaScript's `typeof` function sucks. It has returned vague values since [1997](http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%201st%20edition,%20June%201997.pdf#sec-11.4.3) and always will be due to backwards compatibility. It seems like nearly every call returns `object`. Don't believe me?
```js
typeof {a: 4};
//=> 'object'
typeof [1, 2, 3];
//=> 'object'
typeof new ReferenceError;
//=> 'object'
typeof new Date;
//=> 'object'
typeof /a-z/;
//=> 'object'
typeof JSON;
//=> 'object'
typeof new Number(4);
//=> 'object'
typeof new String('abc');
//=> 'object'
```
Did I hear you say that was not enough proof?
```js
typeof new Boolean(true);
//=> 'object'
```
Wait, you're still not convinced?
```js
typeof Math;
//=> 'object'
```
`to-type` fixes these vague outputs by returning the types you expect to see.
## API
### toType(target)
#### target
**Type**: `all types`
#### returns
**Type**: `string`
**Description**: The return value is always **lowercased**.
## More Examples
```js
toType({a: 4});
//=> 'object'
toType(new Date());
//=> 'date'
toType(Math);
//=>'math'
toType(JSON);
//=> 'json'
toType(new Number(4));
//=> 'number'
toType(new String('abc'));
//=> 'string'
toType(new Boolean(true));
//=> 'boolean'
toType(new ReferenceError());
//=> 'error'
//es2015 and newer
toType(Promise);
//=> 'function'
toType(Symbol());
//=> 'symbol'
```
## License
MIT © [Dawson Botsford](http://dawsonbotsford.com)
---
If you like this, star it. If you want to follow me, follow me.