time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

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 -->