is-data-descriptor Version Badge

github actions coverage License Downloads

npm badge

Returns true if a value has the characteristics of a valid JavaScript data descriptor.

Install

Install with npm:

sh $ npm install --save is-data-descriptor

Usage

js var isDataDesc = require('is-data-descriptor'); var assert = require('assert');

Examples

true when the descriptor has valid properties with valid values.

js // `value` can be anything assert.equal(isDataDesc({ value: 'foo' }), true); assert.equal(isDataDesc({ value: function () {} }), true); assert.equal(isDataDesc({ value: true }), true);

false when not an object

js assert.equal(isDataDesc('a'), false); assert.equal(isDataDesc(null), false);

false when the object has invalid properties

js assert.equal(isDataDesc({ value: 'foo', enumerable: 'baz' }), false); assert.equal(isDataDesc({ value: 'foo', configurable: 'baz' }), false); assert.equal(isDataDesc({ value: 'foo', get() {} }), false); assert.equal(isDataDesc({ get() {}, value: 'foo' }), false);

false when a value is not the correct type

js assert.equal(isDataDesc({ value: 'foo', enumerable: 'foo' }), false); assert.equal(isDataDesc({ value: 'foo', configurable: 'foo' }), false); assert.equal(isDataDesc({ value: 'foo', writable: 'foo' }), false);

Valid properties

The only valid data descriptor properties are the following:

To be a valid data descriptor, either value or writable must be defined.

Invalid properties

A descriptor may have additional invalid properties (an error will not be thrown).

```js var foo = {};

Object.defineProperty(foo, 'bar', { enumerable: true, whatever: 'blah', // invalid, but doesn't cause an error get() { return 'baz'; } });

assert.equal(foo.bar, 'baz'); ```

Related projects

You might also be interested in these projects: