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
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 = {};