README.md (5756B)
1 <!-- 2 3 @license Apache-2.0 4 5 Copyright (c) 2018 The Stdlib Authors. 6 7 Licensed under the Apache License, Version 2.0 (the "License"); 8 you may not use this file except in compliance with the License. 9 You may obtain a copy of the License at 10 11 http://www.apache.org/licenses/LICENSE-2.0 12 13 Unless required by applicable law or agreed to in writing, software 14 distributed under the License is distributed on an "AS IS" BASIS, 15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 See the License for the specific language governing permissions and 17 limitations under the License. 18 19 --> 20 21 # Native Class 22 23 > Determine the specification defined classification of an object. 24 25 <section class="usage"> 26 27 ## Usage 28 29 ```javascript 30 var nativeClass = require( '@stdlib/utils/native-class' ); 31 ``` 32 33 #### nativeClass( value ) 34 35 Returns a `string` value indicating a [specification defined][object-to-string] classification of an `object`. 36 37 ```javascript 38 var str = nativeClass( 'a' ); 39 // returns '[object String]' 40 41 str = nativeClass( 5 ); 42 // returns '[object Number]' 43 44 function Beep() { 45 return this; 46 } 47 str = nativeClass( new Beep() ); 48 // returns '[object Object]' 49 ``` 50 51 </section> 52 53 <!-- /.usage --> 54 55 <section class="notes"> 56 57 ## Notes 58 59 - The function is **not** robust for ES2015+ environments. In ES2015+, [`Symbol.toStringTag`][mdn-symbol-tostringtag] allows overriding the default description of an object. 60 61 ```javascript 62 var toStr = Object.prototype.toString; 63 64 var str = toStr.call( false ); 65 // returns '[object Boolean]' 66 67 var o = {}; 68 str = toStr.call( o ); 69 // returns '[object Object]' 70 71 // Mask the default description: 72 o[ Symbol.toStringTag ] = 'Boolean'; 73 74 str = toStr.call( o ); 75 // returns '[object Boolean]' 76 ``` 77 78 While measures are taken to uncover the default description, such measures can be thwarted. While this function remains useful for type-checking, be aware that value impersonation is possible. Prefer functions tailored to checking for particular value types, as specialized functions are better equipped to address [`Symbol.toStringTag`][mdn-symbol-tostringtag]. 79 80 </section> 81 82 <!-- /.notes --> 83 84 <section class="examples"> 85 86 ## Examples 87 88 <!-- eslint-disable no-restricted-syntax, no-empty-function --> 89 90 <!-- eslint no-undef: "error" --> 91 92 ```javascript 93 var Float32Array = require( '@stdlib/array/float32' ); 94 var Float64Array = require( '@stdlib/array/float64' ); 95 var Int8Array = require( '@stdlib/array/int8' ); 96 var Int16Array = require( '@stdlib/array/int16' ); 97 var Int32Array = require( '@stdlib/array/int32' ); 98 var Uint8Array = require( '@stdlib/array/uint8' ); 99 var Uint8ClampedArray = require( '@stdlib/array/uint8c' ); 100 var Uint16Array = require( '@stdlib/array/uint16' ); 101 var Uint32Array = require( '@stdlib/array/uint32' ); 102 var ArrayBuffer = require( '@stdlib/array/buffer' ); 103 var Symbol = require( '@stdlib/symbol/ctor' ); 104 var nativeClass = require( '@stdlib/utils/native-class' ); 105 106 var str = nativeClass( 'a' ); 107 // returns '[object String]' 108 109 str = nativeClass( 5 ); 110 // returns '[object Number]' 111 112 str = nativeClass( NaN ); 113 // returns '[object Number]' 114 115 str = nativeClass( null ); 116 // returns '[object Null]' 117 118 str = nativeClass( void 0 ); 119 // returns '[object Undefined]' 120 121 str = nativeClass( true ); 122 // returns '[object Boolean]' 123 124 str = nativeClass( false ); 125 // returns '[object Boolean]' 126 127 str = nativeClass( {} ); 128 // returns '[object Object]' 129 130 str = nativeClass( [] ); 131 // returns '[object Array]' 132 133 str = nativeClass( function noop() {} ); 134 // returns '[object Function]' 135 136 str = nativeClass( /./ ); 137 // returns '[object RegExp]' 138 139 str = nativeClass( new Date() ); 140 // returns '[object Date]' 141 142 str = nativeClass( new Map() ); 143 // returns '[object Map]' 144 145 str = nativeClass( new WeakMap() ); 146 // returns '[object WeakMap]' 147 148 str = nativeClass( new Set() ); 149 // returns '[object Set]' 150 151 str = nativeClass( new WeakSet() ); 152 // returns '[object WeakSet]' 153 154 str = nativeClass( Symbol( 'beep' ) ); 155 // returns '[object Symbol]' 156 157 str = nativeClass( new Error() ); 158 // returns '[object Error]' 159 160 str = nativeClass( new TypeError() ); 161 // returns '[object Error]' 162 163 str = nativeClass( new SyntaxError() ); 164 // returns '[object Error]' 165 166 str = nativeClass( new URIError() ); 167 // returns '[object Error]' 168 169 str = nativeClass( new RangeError() ); 170 // returns '[object Error]' 171 172 str = nativeClass( new ReferenceError() ); 173 // returns '[object Error]' 174 175 str = nativeClass( new EvalError() ); 176 // returns '[object Error]' 177 178 str = nativeClass( new Int8Array() ); 179 // returns '[object Int8Array]' 180 181 str = nativeClass( new Uint8Array() ); 182 // returns '[object Uint8Array]' 183 184 str = nativeClass( new Uint8ClampedArray() ); 185 // returns '[object Uint8ClampedArray]' 186 187 str = nativeClass( new Int16Array() ); 188 // returns '[object Int16Array]' 189 190 str = nativeClass( new Uint16Array() ); 191 // returns '[object Uint16Array]' 192 193 str = nativeClass( new Int32Array() ); 194 // returns '[object Int32Array]' 195 196 str = nativeClass( new Uint32Array() ); 197 // returns '[object Uint32Array]' 198 199 str = nativeClass( new Float32Array() ); 200 // returns '[object Float32Array]' 201 202 str = nativeClass( new Float64Array() ); 203 // returns '[object Float64Array]' 204 205 str = nativeClass( new ArrayBuffer() ); 206 // returns '[object ArrayBuffer]' 207 208 str = nativeClass( Math ); 209 // returns '[object Math]' 210 211 str = nativeClass( JSON ); 212 // returns '[object JSON]' 213 214 function Person() { 215 return this; 216 } 217 str = nativeClass( new Person() ); 218 // returns '[object Object]' 219 ``` 220 221 </section> 222 223 <!-- /.examples --> 224 225 <section class="links"> 226 227 [object-to-string]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString 228 229 [mdn-symbol-tostringtag]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag 230 231 </section> 232 233 <!-- /.links -->