TypeError: WeakSet key/WeakMap value 'x' must be an object or an unregistered symbol
Ngoại lệ JavaScript "WeakSet key (or WeakMap value) 'x' must be an object or an unregistered symbol" xảy ra khi một giá trị có kiểu không hợp lệ được sử dụng làm khóa trong WeakSet hoặc làm giá trị trong WeakMap.
Thông báo
TypeError: Invalid value used as weak map key (V8-based) TypeError: WeakMap key 1 must be an object or an unregistered symbol (Firefox) TypeError: WeakMap keys must be objects or non-registered symbols (Safari) TypeError: Invalid value used in weak set (V8-based) TypeError: WeakSet value 1 must be an object or an unregistered symbol (Firefox) TypeError: WeakSet values must be objects or non-registered symbols (Safari)
Loại lỗi
TypeError
Điều gì đã xảy ra?
WeakSet và WeakMap yêu cầu các khóa phải có khả năng thu gom rác. Chỉ các đối tượng và các symbol không được đăng ký (tức là các symbol không được trả về bởi Symbol.for()) là hợp lệ. Để biết thêm thông tin, hãy xem Quản lý bộ nhớ. Nếu bạn muốn thêm các khóa là chuỗi, số hoặc các giá trị nguyên thủy khác, hãy lưu trữ chúng trong Set hoặc Map thông thường.
Ví dụ
>Các trường hợp không hợp lệ
js
new WeakSet().add(1); // TypeError
new WeakMap().set(1, {}); // TypeError
new WeakSet([1]); // TypeError
new WeakMap([[1, {}]]); // TypeError
Các trường hợp hợp lệ
js
new WeakSet().add({}); // OK
new WeakMap().set({}, 1); // OK
new Set([1]); // OK
new Map([[1, {}]]); // OK