TypeError: can't assign to property "x" on "y": not an object

Ngoại lệ JavaScript strict mode "can't assign to property" xảy ra khi cố gắng tạo một thuộc tính trên giá trị nguyên thủy như symbol, string, number hoặc boolean. Các giá trị nguyên thủy không thể chứa bất kỳ thuộc tính nào.

Thông báo

TypeError: Cannot create property 'x' on number '1' (V8-based)
TypeError: can't assign to property "x" on 1: not an object (Firefox)
TypeError: Attempted to assign to readonly property. (Safari)

Loại lỗi

TypeError.

Nguyên nhân?

Trong strict mode, một TypeError được phát sinh khi cố gắng tạo một thuộc tính trên giá trị nguyên thủy như symbol, string, number hoặc boolean. Các giá trị nguyên thủy không thể chứa bất kỳ thuộc tính nào.

Vấn đề có thể là một giá trị không mong đợi đang chảy đến một nơi không mong đợi, hoặc một biến thể đối tượng của String hoặc Number được mong đợi.

Ví dụ

Trường hợp không hợp lệ

js
"use strict";

const foo = "my string";
// The following line does nothing if not in strict mode.
foo.bar = {}; // TypeError: can't assign to property "bar" on "my string": not an object

Sửa vấn đề

Hãy sửa code để ngăn giá trị nguyên thủy được sử dụng ở những nơi như vậy, hoặc sửa vấn đề bằng cách tạo đối tượng tương đương Object.

js
"use strict";

const foo = new String("my string");
foo.bar = {};

Xem thêm