TypeError: "x" is not a non-null object

JavaScript の例外 "is not a non-null object" は、オブジェクトが何かを求めているのに提供されなかった場合に発生します。 null はオブジェクトではなく、動作しません。

エラーメッセージ

TypeError: Invalid descriptor for property {x} (Edge)
TypeError: "x" is not a non-null object (Firefox)
TypeError: Property description must be an object: "x" (Chrome)
TypeError: Invalid value used in weak set (Chrome)

エラータイプ

TypeError

何がうまくいかなかったのか?

どこかでオブジェクトが期待されていますが、提供されませんでした。 null はオブジェクトではなく、動作しません。与えられた状況で適切なオブジェクトを提供しなければなりません。

プロパティディスクリプターが期待される場合

Object.create() メソッドや Object.defineProperty() メソッド、Object.defineProperties() メソッドを使用するとき、省略可能なディスクリプター引数として、プロパティディスクリプターオブジェクトが想定されます。 (ただの数値のように) オブジェクトを提供しないと、エラーが発生します。

Object.defineProperty({}, 'key', 1);
// TypeError: 1 is not a non-null object

Object.defineProperty({}, 'key', null);
// TypeError: null is not a non-null object

有効なプロパティディスクリプターはこのようになります。

Object.defineProperty({}, 'key', { value: 'foo', writable: false });

WeakMap オブジェクトと WeakSet オブジェクトはオブジェクトキーが必要

WeakMap オブジェクトと WeakSet オブジェクトはオブジェクトキーを保持します。そのほかの型をキーとして使用できません。

var ws = new WeakSet();
ws.add('foo');
// TypeError: "foo" is not a non-null object

代わりにオブジェクトを使用してください。

ws.add({foo: 'bar'});
ws.add(window);

関連項目