Permalink
Browse files

Core: Support Symbol wrapper objects in jQuery.type

In ECMAScript 2015 (ES6), the native typeof operator returns "symbol"
for Symbol primitives. As it is possible to wrap symbols using the
Object constructor, symbols can be objects as well as any other
primitive type in JavaScript and should be determined by jQuery.type.

Cherry-picked from 8a73434
Closes gh-2627
  • Loading branch information...
ChristianGrete authored and markelog committed Oct 2, 2015
1 parent 905ab09 commit c7cf28681eeb2a7f6d71e5e17b293c252900bda7
Showing with 14 additions and 1 deletion.
  1. +1 −1 src/core.js
  2. +13 −0 test/unit/core.js
View
@@ -498,7 +498,7 @@ if ( typeof Symbol === "function" ) {
/* jshint ignore: end */
// Populate the class2type map
jQuery.each( "Boolean Number String Function Array Date RegExp Object Error".split( " " ),
jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
function( i, name ) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
} );
View
@@ -264,6 +264,19 @@ QUnit.test( "type", function( assert ) {
assert.equal( jQuery.type( new MyObject() ), "object", "Object" );
} );
QUnit.test( "type for `Symbol`", function( assert ) {
// Prevent reference errors
if( typeof Symbol !== "function" ) {
assert.expect( 0 );
return
}
assert.expect( 2 );
assert.equal( jQuery.type( Symbol() ), "symbol", "Symbol" );
assert.equal( jQuery.type( Object( Symbol() ) ), "symbol", "Symbol" );
});
QUnit.asyncTest( "isPlainObject", function( assert ) {
assert.expect( 16 );

0 comments on commit c7cf286

Please sign in to comment.