HomeLập trìnhJavaScriptKhông thể đọc...

Không thể đọc Thuộc tính ‘đẩy’ của Không xác định trong JavaScript


Khi làm việc với mảng JavaScript, bạn phải cẩn thận để không gọi hàm push(), pop(), shift(), unShift()hoặc splice() các phương thức trên một biến có nghĩa là một mảng nhưng có giá trị là undefined.

Nếu bạn làm sai điều này, bạn sẽ gặp lỗi này:

s_E70A1833F8285C7F5412DCD9531F13EA1E92CB215392E2D976AD0B6D0DFB9AA0_1665231049694_image

Nếu bạn gọi pop() hoặc bất kỳ phương pháp nào khác thay vì đẩy (như trong ví dụ trên), thay vào đó, lỗi ở trên sẽ mang ‘pop’ (hoặc phương pháp khác mà bạn đang sử dụng). Điều này có nghĩa là phương pháp mà bạn sẽ tìm hiểu trong bài viết sẽ hiệu quả với tất cả các phương pháp.

Để bạn hiểu đúng bài viết này và lỗi này, điều cần thiết là làm nổi bật các lý do khác nhau có thể gây ra sự cố này:

  • Bạn gọi phương thức trên một biến được đặt trước đó thành undefined.
  • Bạn gọi phương thức trên một biến trước khi nó được khởi tạo với một mảng.
  • Bạn gọi phương thức trên một phần tử mảng chứ không phải chính mảng đó.
  • Bạn gọi phương thức trên một thuộc tính đối tượng không tồn tại hoặc có một undefined giá trị.
Đọc thêm  Giới thiệu về cách thức hoạt động của trình quản lý gói JavaScript

Hãy nhớ rằng phương pháp này có thể push(), pop(), shift(), unShift() hoặc splice(). Bây giờ chúng ta hãy phân tích từng tình huống và tìm hiểu cách khắc phục lỗi.

Gọi phương thức trên một biến đã được đặt trước đó undefined

Khi làm việc với biến và kiểu dữ liệu như chuỗi, chúng ta có xu hướng gán giá trị cho biến như undefinednull trước khi chuyển vào giá trị ban đầu. Đôi khi chúng ta làm điều này khi gọi hàm hoặc xử lý một số hành động nhất định.

Đối với mảng, nó không hoạt động theo cách đó – nếu không, bạn sẽ gặp lỗi:

let myArray = undefined;

myArray.push("John Doe"); // Uncaught TypeError: Cannot read properties of undefined (reading 'push')

console.log(myArray);

Để khắc phục điều này, Bạn phải khai báo rằng biến đó là một mảng trước các phương thức mảng như push(), pop()và những người khác có thể làm việc trên nó:

let myArray = [];

myArray.push("John Doe");

console.log(myArray); // ["John Doe"]

Ghi chú: Khi một biến được khai báo, nó không được coi là một biến mảng cho đến khi nó được khởi tạo bằng cách sử dụng Array hàm tạo hoặc sử dụng ký hiệu mảng ([]).

Gọi phương thức trên một biến trước khi nó được khởi tạo với một mảng

Như bạn vừa tìm hiểu ở trên, một cách khác để bạn có thể khai báo các biến là tạo chúng mà không gán giá trị cho chúng.

let myArray;

myArray.push("John Doe"); // Uncaught TypeError: Cannot read properties of undefined (reading 'push')

console.log(myArray);

Điều này hoạt động tốt đối với các loại dữ liệu như chuỗi, số và các loại khác nhưng không hoạt động tốt đối với một mảng. Bạn phải khởi tạo mảng với Array hàm tạo hoặc ký hiệu mảng ([]).

let myArray = [];

// Or

let myArray = new Array();

Mã của chúng tôi bây giờ sẽ trông như thế này:

let myArray = [];

myArray.push("John Doe");

console.log(myArray); // ["John Doe"]

Gọi phương thức trên một phần tử mảng chứ không phải chính mảng đó

Các phương thức mảng có nghĩa là được gọi trên chính mảng đó (có nghĩa là mảng hoặc biến được sử dụng để lưu trữ mảng) chứ không phải một phần tử mảng.

// Example of arrays
let myArray = [12, 13, 17];
let myArray2 = [];
let myArray3 = new Array();

// Example of array elements
myArray[0];
myArray[1];
myArray[2];

Bạn có thể muốn đẩy một phần tử đến một vị trí cụ thể của một mảng và nghĩ rằng việc gắn một trong hai push() hoặc unShift() phương thức vào phần tử trực tiếp sẽ khắc phục điều đó. Thật không may, bạn sẽ gặp lỗi “không thể đọc thuộc tính ‘đẩy’ của không xác định”:

let myArray = [12, 13, 17];

myArray[3].push(15); // Uncaught TypeError: Cannot read properties of undefined (reading 'push')

console.log(myArray);

Để khắc phục điều này, bạn phải gọi phương thức đẩy trên chính biến đó chứ không phải trên phần tử của nó:

let myArray = [12, 13, 17];

myArray.push(15);

console.log(myArray); // [12,13,17,15]

Gọi phương thức trên thuộc tính đối tượng không tồn tại hoặc có thuộc tính undefined giá trị

Kịch bản cuối cùng có thể xảy ra khi bạn cố gắng gọi phương thức trên một thuộc tính đối tượng không tồn tại hoặc có giá trị được đặt thành undefined:

const user = { name: 'John Doe', scores: undefined };
const user2 = { name: 'John Doe' };

user.scores.push(50);
user2.scores.push(50); 
// Uncaught TypeError: Cannot read properties of undefined (reading 'push')

Trong trường hợp trên, có hai đối tượng: đối tượng đầu tiên có một cặp khóa-giá trị scores có giá trị được đặt thành undefined, nhưng nó có nghĩa là nhận các giá trị mảng. Trong khi đối với đối tượng thứ hai, scores không tồn tại. Cả hai tình huống đều có thể gây ra lỗi.

Đọc thêm  JavaScript cho vòng lặp – Giải thích với các ví dụ

Để khắc phục, tất cả những gì bạn phải làm là khởi tạo khóa, do đó, nó mong đợi các giá trị mảng bằng cách sử dụng ký tự mảng:

const user = { name: "John Doe", scores: [] };

user.scores.push(50);

console.log(user);

kết thúc

Trong bài viết này, bạn đã học cách sửa lỗi “Cannot read properties of undefined”, xảy ra khi bạn đính kèm các phương thức mảng này vào các biến không được khai báo hoặc khởi tạo dưới dạng biến.

Hãy mã hóa vui vẻ!



Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status