Documentación offline JavaScript main

TypeError: "x" is (not) "y"

main Documentación oficial Licencia CC-BY-SA-2.5Descargado el 2026-08-02

En esta página

The JavaScript exception "x is (not) y" occurs when there was an unexpected type. Oftentimes, unexpected {{jsxref("undefined")}} or null values.

Message#

TypeError: Cannot read properties of undefined (reading 'x') (V8-based)
TypeError: "x" is undefined (Firefox)
TypeError: "undefined" is not an object (Firefox)
TypeError: undefined is not an object (evaluating 'obj.x') (Safari)

TypeError: "x" is not a symbol (V8-based & Firefox)
TypeError: Symbol.keyFor requires that the first argument be a symbol (Safari)

Error type#

{{jsxref("TypeError")}}.

What went wrong?#

There was an unexpected type. This occurs oftentimes with {{jsxref("undefined")}} or null values.

Also, certain methods, such as {{jsxref("Object.create()")}} or {{jsxref("Symbol.keyFor()")}}, require a specific type, that must be provided.

Examples#

Invalid cases#

You cannot invoke a method on an undefined or null variable.

```js example-bad const foo = undefined; foo.substring(1); // TypeError: foo is undefined

const foo2 = null; foo2.substring(1); // TypeError: foo2 is null

Certain methods might require a specific type.

```js example-bad
const foo = {};
Symbol.keyFor(foo); // TypeError: foo is not a symbol

const foo2 = "bar";
Object.create(foo2); // TypeError: "foo2" is not an object or null

Fixing the issue#

To fix null pointer to undefined or null values, you can test if the value is undefined or null first.

```js example-good if (foo !== undefined && foo !== null) { // Now we know that foo is defined, we are good to go. }

Or, if you are confident that `foo` will not be another [falsy](/en-US/docs/Glossary/Falsy) value like `""` or `0`, or if filtering those cases out is not an issue, you can simply test for its truthiness.

```js example-good
if (foo) {
  // Now we know that foo is truthy, it will necessarily not be null/undefined.
}

See also#

  • {{jsxref("undefined")}}
  • null