mirror of
https://github.com/jquery/jquery.git
synced 2025-01-10 18:24:24 +00:00
Data: Make the data object a regular object again
The change in gh-4603 made the object returned by `elem.data()` a prototype-less object. That's a desired change to support keys colliding with `Object.prototype` properties but it's also a breaking change so it has to wait for jQuery 4.0.0. A 3.x-only test was added to avoid breaking it in the future on this branch. Fixes gh-4665 Ref gh-4603 Closes gh-4666
This commit is contained in:
parent
763dd3fefa
commit
65e909844c
@ -22,7 +22,7 @@ Data.prototype = {
|
||||
|
||||
// If not, create one
|
||||
if ( !value ) {
|
||||
value = Object.create( null );
|
||||
value = {};
|
||||
|
||||
// We can accept data for non-element nodes in modern browsers,
|
||||
// but we should not, see #8335.
|
||||
|
@ -990,17 +990,20 @@ QUnit.test( ".data(prop) does not create expando", function( assert ) {
|
||||
}
|
||||
} );
|
||||
|
||||
QUnit.test( "keys matching Object.prototype properties (gh-3256)", function( assert ) {
|
||||
assert.expect( 2 );
|
||||
QUnit.test( ".data() returns a regular object (jQuery <4 only, gh-4665)", function( assert ) {
|
||||
assert.expect( 4 );
|
||||
|
||||
var div = jQuery( "<div></div>" );
|
||||
function verifyRegularObject( assert, object ) {
|
||||
assert.strictEqual( object.hasOwnProperty, Object.prototype.hasOwnProperty,
|
||||
"Data object has the hasOwnProperty method" );
|
||||
assert.strictEqual( object + "", "[object Object]",
|
||||
"Data object can be stringified" );
|
||||
}
|
||||
|
||||
assert.strictEqual( div.data( "hasOwnProperty" ), undefined,
|
||||
"hasOwnProperty not matched (before forced data creation)" );
|
||||
var elem = jQuery( "<div></div>" );
|
||||
|
||||
// Force the creation of a data object for this element.
|
||||
div.data( { foo: "bar" } );
|
||||
verifyRegularObject( assert, elem.data() );
|
||||
|
||||
assert.strictEqual( div.data( "hasOwnProperty" ), undefined,
|
||||
"hasOwnProperty not matched (after forced data creation)" );
|
||||
elem.data( "foo", "bar" );
|
||||
verifyRegularObject( assert, elem.data() );
|
||||
} );
|
||||
|
Loading…
Reference in New Issue
Block a user