2013-04-26 15 views
6

Tôi có điều này trong javascript của tôi:Làm cách nào để kiểm tra các giá trị không xác định trong IE8?

console.log(filters); 
console.log('----'); 
console.log(filters.max_price); 

Trong Chrome, nó cho thấy điều này. Đây là hành vi được mong đợi.

Object {max_price: undefined, sort_by: undefined, distance: undefined, start: undefined, num: undefined} 
---- 
undefined 

Trong IE8, nhật ký cho thấy điều này:

LOG: Object Object 
---- 
LOG: String 

Tại sao IE8 nghĩ rằng đó là một chuỗi? Tôi cần phải biết nếu nó không xác định.

Tôi có nhiều mã đặt giá trị mặc định.

if(typeof filters.max_price == undefined){ //I use this technique a lot! 
    filter.max_price = 2000; 
} 

Làm cách nào tôi có thể kiểm tra defefine-ds trong IE8? Tôi có nên làm điều này không? Điều này dường như làm việc (yay ...), nhưng nó có vẻ rẻ và hacky.

if(!filters.max_price || typeof filters.max_price == 'undefined'){ 

Có một cách đơn giản tôi có thể làm điều này với nhấn?

+0

Bạn có nghĩa là 'không xác định' như trong "đã khai báo nhưng không được xác định" hoặc "không xác định" như trong "chưa được khai báo hay được xác định"; hai điều khác nhau ... – elclanrs

+0

http://stackoverflow.com/questions/690251/what-happened-to-console-log-in-ie8 – jurgemaister

+0

@jurgemaister yea Tôi biết ... nhưng điều đó không liên quan gì đến câu hỏi – TIMEX

Trả lời

5

Bạn có thể sử dụng phương pháp này, nhưng nó sẽ không làm giảm mã của bạn rất nhiều:

filters.max_price = filters.max_price || 2000; 

này, tuy nhiên, sẽ ghi đè lên giá trị nếu nó 0. Phương pháp tốt nhất vẫn là:

if(typeof filters.max_price === 'undefined'){ 
    // init default 
} 
+0

Có phải === tốt hơn phiên bản hiện tại của tôi == không? Sẽ gấp ba === làm việc với IE8? – TIMEX

+0

@TIMEX Triple cũng so sánh các loại và loại không xác định là "không xác định" –

+0

Nó không hoạt động với IE8. if (typeof filters.max_price === 'undefined') {.... IE8 không bắt được nó. – TIMEX

0

Bạn có thể sử dụng toán tử bảo vệ để đặt giá trị mặc định:

filters.max_price = filters.max_price || 2000; 

Để kiểm tra xem giá trị có phải là số hay không (w hich Tôi nghĩ một giá), bạn có thể sử dụng

if(isNaN(filters.max_price)) { 
    //enter code here 
} 

này cũng sẽ lọc ra undefined như không phải là một số.