2012-08-28 57 views
7

Tôi đang làm việc trên một bài tập codecademy.com nơi chúng tôi sử dụng các câu lệnh for-in để lặp qua một đối tượng và in chào bằng các ngôn ngữ khác nhau bằng cách kiểm tra xem các giá trị của thuộc tính trong đối tượng ngôn ngữ là các chuỗi sử dụng typeofJavaScript: sử dụng typeof để kiểm tra xem chuỗi

kiểm tra của tôi để xem liệu giá trị có phải là chuỗi không hoạt động hay không. vòng của tôi đem lại cho tôi kết quả này

english 
french 
notALanguage 
spanish 

var languages = { 
     english: "Hello!", 
     french: "Bonjour!", 
     notALanguage: 4, 
     spanish: "Hola!" 
    }; 

    // print hello in the 3 different languages 
    for(var hello in languages){ 
     var value = hello; 
     if (typeof value === "string"){ 
     console.log(value); 
     } 
    } 

Đây là những hướng dẫn cho việc thực hiện

Đối tượng không phải là quá xa lạ nếu bạn thực sự nghĩ về nó!

Hãy nhớ rằng bạn có thể tìm ra loại biến bằng cách sử dụng typeof myVariable. Các loại mà chúng tôi quan tâm bây giờ là "đối tượng", "chuỗi" và "số".

Gọi lại vòng lặp for-in:

cho (var x in obj) {executeSomething(); }

Điều này sẽ đi qua tất cả các thuộc tính của obj từng cái một và gán tên thuộc tính cho x trên mỗi lần chạy vòng lặp.

Hãy kết hợp kiến ​​thức của chúng tôi về hai khái niệm này.

Kiểm tra đối tượng ngôn ngữ. Ba thuộc tính là chuỗi, trong khi một là một số.

Sử dụng vòng lặp for-in để in ra ba cách để chào hỏi. Trong vòng lặp , bạn nên kiểm tra xem giá trị thuộc tính có phải là một chuỗi không vì vậy bạn không vô tình in một số.

+2

Và câu hỏi là ... – zerkms

+2

có thể đặt câu hỏi mà không cần sử dụng dấu hỏi (?) Và không sử dụng cú pháp điển hình của câu hỏi. OP cho thấy vấn đề của tôi là gì, và hai người trả lời (và tất cả những người upvoted) đều hiểu rõ. – Leahcim

+1

có, bạn đã đưa ra mã và đầu ra rõ ràng tương ứng. Đó là một ý tưởng tốt để nói những gì * mong đợi của bạn * là, vì mã hoạt động hoàn toàn hợp lệ. – zerkms

Trả lời

15

Đó là vì bạn đang kiểm tra key của đối tượng. Để kiểm tra giá trị thực tế, bạn nên làm một cái gì đó như object[key]. Hãy thử điều này:

var languages = { 
     english: "Hello!", 
     french: "Bonjour!", 
     notALanguage: 4, 
     spanish: "Hola!" 
    }; 

// print hello in the 3 different languages 
for(var hello in languages){ 
    var value = languages[hello]; 
    if (typeof value === "string"){ 
    console.log(value); 
    } 
} 
1

Bạn đang kiểm tra các khóa của đối tượng chứ không phải giá trị. Nó thường là một thực hành tốt để kiểm tra đối với các nhà xây dựng của một đối tượng để xác định loại hình của nó.

Something như thế này:

var languages = { 
    english: "Hello!", 
    french: "Bonjour!", 
    notALanguage: 4, 
    spanish: "Hola!" 
}; 

for(i in languages) { 

    if(languages[i].constructor === String) { 
    console.log(languages[i]) 
    }; 

}; 
2

Dưới đây là câu trả lời: (sử dụng typeof và sau đó là tên đối tượng tiếp theo là var trong của bạn cho tuyên bố và thử nghiệm cho dù đó là bằng "chuỗi")

var languages = { 
    english: "Hello!", 
    french: "Bonjour!", 
    notALanguage: 4, 
    spanish: "Hola!" 
}; 

// print hello in the 3 different languages 
for (var x in languages){ 
    if (typeof languages[x] === "string"){ 
     console.log(languages[x]); 
    } 
    else ; 
} 
0

Mã hóa dưới đây cũng hữu ích để chỉ thực hiện giá trị chuỗi. Bằng cách sử dụng biến để truy cập danh sách thuộc tính abject sau đó bằng cách sử dụng nó, kiểm tra giá trị là NotANumber bằng cách sử dụng isNaN.Mã đưa ra dưới đây là hữu ích cho bạn

var languages = { 
english: "Hello!", 
french: "Bonjour!", 
notALanguage: 4, 
spanish: "Hola!" 
}; 

// print hello in the 3 different languages 
for(a in languages) 
{ 
if(isNaN(languages[a])) 
console.log(languages[a]); 
} 
0

đây là cho giá trị để làm việc cho tôi

for (var x bằng các ngôn ngữ) {

if(typeof languages[x] === "string"){ 
    console.log(languages[x]); 
} else } 
Các vấn đề liên quan