aboutsummaryrefslogtreecommitdiff
path: root/files/fr/web/javascript/reference/errors/no_non-null_object/index.md
blob: d635131c4b03389bf073f655ff47d65fafa66a6e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
---
title: 'TypeError: "x" is not a non-null object'
slug: Web/JavaScript/Reference/Errors/No_non-null_object
tags:
  - Erreurs
  - JavaScript
  - TypeError
translation_of: Web/JavaScript/Reference/Errors/No_non-null_object
original_slug: Web/JavaScript/Reference/Erreurs/No_non-null_object
---
{{JSSidebar("Errors")}}

## Message

    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)

## Type d'erreur

{{jsxref("TypeError")}}

## Quel est le problème ?

Un objet devrait être trouvé et n'est pas fourni. La valeur {{jsxref("null")}} n'est pas un objet et ne fonctionnera pas, il est nécessaire de fournir un véritable objet pour que le code en question fonctionne.

## Exemples

### Absence d'un descripteur de propriété

Lorsqu'on utilise des méthodes telles que {{jsxref("Object.create()")}}, {{jsxref("Object.defineProperty()")}} ou {{jsxref("Object.defineProperties()")}}, le paramètre optionnel de description des propriétés doit être un descripteur sous la forme d'un objet. Si la valeur fournie n'est pas un objet (mais par exemple un nombre), l'appel à la méthode déclenchera une erreur :

```js example-bad
Object.defineProperty({}, 'cle', 1);
// TypeError: 1 is not a non-null object

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

Un descripteur de propriété valide aura la structure suivante :

```js example-good
Object.defineProperty({}, 'cle', { value: 'toto', writable: false });
```

### Les clés de `WeakMap` et `WeakSet` sont des objets

Les objets {{jsxref("WeakMap")}} et {{jsxref("WeakSet")}} utilisent des objets comme clé. On ne peut pas utiliser d'autres types de valeurs pour les clés de ces objets.

```js example-bad
var ws = new WeakSet();
ws.add('toto');
// TypeError: "toto" is not a non-null object
```

À la place, on utilisera des objets :

```js example-good
ws.add({toto: 'truc'});
ws.add(window);
```

## Voir aussi

- {{jsxref("Object.create()")}}
- {{jsxref("Object.defineProperty()")}}, {{jsxref("Object.defineProperties()")}}
- {{jsxref("WeakMap")}}, {{jsxref("WeakSet")}}