I believe #5744 introduced a behavioral difference between development and production versions of React. We released it as a part of 15.0, and this difference still exists.

The production behavior hasn’t changed. However the development behavior diverged after this change.

``` js
var el = React.createElement('div', { key: undefined })
document.body.innerHTML = (typeof el.key) + ' ' + el.key
```

What do you expect to appear?
### 0.14.x
- Development (https://jsfiddle.net/sjLcmnq6/1/): `object null`
- Production (https://jsfiddle.net/qro1wck0/1/): `object null`
## 15.x
- Development (https://jsfiddle.net/69z2wepo/43538/):  **`string undefined`**
- Production (https://jsfiddle.net/rakg6uwy/1/): `object null`

The 15.x dev behavior is different because [dev code path only checks the existence of a property but not whether it’s undefined](https://github.com/alitaheri/react/blob/c3980a6d08257d39a08bed8b116d53a56344166b/src/isomorphic/classic/element/ReactElement.js#L130-L133) whereas the [prod code path checks for undefined explicitly](https://github.com/alitaheri/react/blob/c3980a6d08257d39a08bed8b116d53a56344166b/src/isomorphic/classic/element/ReactElement.js#L135-L136).

`React.cloneElement()` is not affected because it doesn’t include those warnings.

---

This doesn’t seem like a major problem (nobody noticed it!) in the real world, but I think we should fix this.
I have a related fix in the works so I’ll add some more tests and include it.

var config = {foo: 1};
    var element = React.createFactory(ComponentClass)(config);
    expect(element.props.foo).toBe(1);
    config.foo = 2;
    expect(element.props.foo).toBe(1);
  });
  it('does not fail if config has no prototype', function() {
    var config = Object.create(null, {foo: {value: 1, enumerable: true}});
    var element = React.createFactory(ComponentClass)(config);
    expect(element.props.foo).toBe(1);
  });
  it('warns if the config object inherits from any type other than Object', function() {
    spyOn(console, 'error');
    React.createElement('div', {foo: 1});
    expect(console.error).not.toHaveBeenCalled();
    React.createElement('div', Object.create({foo: 1}));
    expect(console.error.calls.count()).toBe(1);
    expect(console.error.calls.argsFor(0)[0]).toContain(
      'React.createElement(...): Expected props argument to be a plain object. ' +
      'Properties defined in its prototype chain will be ignored.'
    );
  });
  it('extracts key and ref from the config', function() {
    var element = React.createFactory(ComponentClass)({
      key: '12',
      ref: '34',
      foo: '56',
    });
    expect(element.type).toBe(ComponentClass);
    expect(element.key).toBe('12');