]> source.dussan.org Git - jquery.git/commitdiff
Core: Support Symbol wrapper objects in jQuery.type
authorChristian Grete <webmaster@christiangrete.com>
Fri, 2 Oct 2015 22:28:34 +0000 (00:28 +0200)
committerOleg Gaidarenko <markelog@gmail.com>
Mon, 12 Oct 2015 22:18:39 +0000 (01:18 +0300)
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 8a734344f2566dab5b8d34ecd79ae81ebd8843c5
Closes gh-2627

src/core.js
test/unit/core.js

index 0bab1a80c148dbb56b99aa7de01e67a36de69785..5e0037f194138efea30774a36f449fffdbcc25f4 100644 (file)
@@ -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();
 } );
index f8fb1c7cdbdc62721dab16ae27572e5a0a291366..c6d68df2d5a84f0d9970842f64cb084671b0347f 100644 (file)
@@ -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 );