8

Tôi biết có rất nhiều câu hỏi liên quan đến lỗi này và tôi đã kiểm tra hầu hết trong số đó và không có gì giúp tôi giải quyết vấn đề của mình. (Mà dường như dễ dàng như vậy để gỡ lỗi ...)Loại không được kích hoạt Javascript Lỗi: Không thể đọc thuộc tính '0' không xác định

Tôi có một mảng (đó là trống rỗng AAT đầu tiên):

var words = []; 

Và chức năng hasLetter của tôi, kiểm tra nếu chúng ta tìm thấy một lá thư (object) trong mảng (mà tôi gọi ở đây: d) từ.

function hasLetter(letter,d){ 

// if words[0] not null should return object of letter "a", here we getting 
// the index of the letter (since ascii of "a" is 97, I substract 97) 
var ascii = letter.charCodeAt(0)-97; 

//Trying to not get an error with this but still creates an err 
if(typeof d[ascii ] !== "undefined" && d[ascii ] !== null && d[ascii ].length > 0){ 
    if(d[ascii].letter == letter){ 
     return true; 
    } 
} 
return false; } 

và tôi có hàm gọi là addLetter để kiểm tra xem hasLetter trả về true/false và sau đó tạo hoặc không phù hợp với nút mới.

function addLetter(letter,d){ 
var ascii = letter.charCodeAt(0)-97; 
if(!hasLetter(letter,d)){ 
    document.write("This letter" + letter + " hasn't been found in words."); 
    d[ascii] = new Node(letter); 
} 
    document.write("This letter " + letter + " already exists in words."); 
    document.write(d[ascii].letter); 

}

và nếu tôi thử nghiệm:

addLetter("a",words); 

nó sẽ trả về:

Uncaught TypeError: Cannot read property '0' of undefined 

Tôi không biết phải làm gì để nói "nếu nó không xác định sau đó don 't nhìn vào nó hoặc một cái gì đó dọc theo những dòng ...

Cảm ơn

+0

Nếu bạn muốn tìm một chữ cái trong mảng, thì (words.indexOf (chữ cái)> 0) sẽ trả về cho bạn xem chữ cái có hiện diện hay không. – mohamedrias

+0

Bạn không thể làm 'hasLetter (" a ", words []);', phải là 'hasLetter (" a ", words);' – theonlygusti

+0

@mohamedrias không có. – theonlygusti

Trả lời

9

Lỗi là ở đây:

hasLetter("a",words[]); 

Bạn đang chuyển mục đầu tiên của words, thay vì mảng.

Thay vào đó, vượt qua mảng đến chức năng:

hasLetter("a",words); 

Vấn đề giải quyết!


Dưới đây là một phân tích về những gì vấn đề là:

Tôi đoán trong trình duyệt của bạn (chrome ném một lỗi khác nhau), words[] == words[0], vì vậy khi bạn gọi hasLetter("a",words[]);, bạn đang thực sự kêu gọi hasLetter("a",words[0]);. Vì vậy, về bản chất, bạn đang chuyển mục đầu tiên của từ tới hàm của bạn, không phải là toàn bộ mảng.

Tất nhiên, vì words chỉ là một mảng trống, words[0]undefined. Do đó, cuộc gọi chức năng của bạn thực sự là:

hasLetter("a", undefined); 

có nghĩa là, khi bạn cố gắng truy cập vào d[ascii], bạn đang thực sự cố gắng truy cập undefined[0], vì thế mà lỗi.

+0

Có chính xác, tôi đã thất bại cuộc gọi của tôi hasLetter bằng cách thêm "[]" nhưng lỗi của tôi thực sự xuất phát từ một chức năng khác (nó đến từ cái này nhưng khi gọi một số khác). Tôi sẽ tạo ra một chủ đề mới (hoặc tôi nên cập nhật này?) Nhưng nhờ giải thích điều này, nó đã giúp :) –

+0

OK, yeah, có ý nghĩa; Tôi đã nhầm lẫn bởi lỗi bạn đang nhận được, tôi đã có thể mong đợi nó được nhiều hơn dọc theo dòng của "bất ngờ]". Dù sao cũng cảm ơn! Nếu bạn bình chọn câu trả lời này, tôi sẽ có 2k reptation! – theonlygusti

2

Không có lỗi khi tôi sử dụng mã của bạn,

nhưng tôi gọi phương thức hasLetter như thế này:

hasLetter("a",words); 
0

Tôi không nghĩ bạn cần số [] trong cuộc gọi chức năng của mình. Đầu ra của hasLetter("a",words); là gì?

Các vấn đề liên quan