Sometimes, we may run into the ‘TypeError: "x" is not a non-null object’ when we’re developing JavaScript apps.
In this article, we’ll look at how to fix the ‘TypeError: "x" is not a non-null object’ when we’re developing JavaScript apps.
Fix the ‘TypeError: "x" is not a non-null object’ When Developing JavaScript Apps
To fix the ‘TypeError: "x" is not a non-null object’ when we’re developing JavaScript apps, we should make sure that we’re calling Object.create
, Object.defineProperty
and Object.defineProperties
with objects that aren’t null.
Also, if we’re using weak maps or weak sets, we should make sure the key we add is an object.
On Edge, the error message for this error is TypeError: Invalid descriptor for property {x}
.
On Firefox, the error message for this error is TypeError: "x" is not a non-null object
.
And on Chrome, the error message for this error is TypeError: Property description must be an object: "x"
and TypeError: Invalid value used in weak set
.
For instance, the following code will throw the error:
Object.defineProperty({}, 'key', 1);
Object.defineProperty({}, 'key', null);
On the first line, 1 isn’t a non-null object. In the 2nd line, null
isn’t a non-null object.
Instead, we write:
Object.defineProperty({}, 'key', { value: 'foo', writable: false });
to add a property key
to the empty object with value 'foo'
and make it read-only with writable
set to false
.
Also, if we’re using weak maps or weak sets, we should make sure the key we add is an object.
For instance, we’ll get the error if we write:
const ws = new WeakSet();
ws.add('foo');
since 'foo'
isn’t a non-null object.
Instead, we write:
ws.add({foo: 'bar'});
to add an object into the set.
Conclusion
To fix the ‘TypeError: "x" is not a non-null object’ when we’re developing JavaScript apps, we should make sure that we’re calling Object.create
, Object.defineProperty
and Object.defineProperties
with objects that aren’t null.
Also, if we’re using weak maps or weak sets, we should make sure the key we add is an object.
On Edge, the error message for this error is TypeError: Invalid descriptor for property {x}
.
On Firefox, the error message for this error is TypeError: "x" is not a non-null object
.
And on Chrome, the error message for this error is TypeError: Property description must be an object: "x"
and TypeError: Invalid value used in weak set
.