2012-09-21 31 views
16

tôi dường như được sử dụng thử nghiệm này rất nhiềuJavascript kiểm tra (object && phản đối! == "null" && đối tượng! == "không xác định")

if(object && object !== "null" && object !== "undefined"){ 
    doSomething(); 
} 

trên objects tôi nhận được lại từ một cuộc gọi dịch vụ hoặc từ việc đọc cookie (vì các trình duyệt khác nhau trả về các giá trị khác nhau null, undefined, "null" hoặc "undefined").

Có cách nào dễ dàng/hiệu quả hơn để thực hiện kiểm tra này không?

+3

Nếu nó thực sự có giá trị chuỗi '" null "' và '" undefined "', thì phương pháp của bạn không thể đơn giản hơn. –

+0

Đôi khi nó có các chuỗi '" null "' hoặc '" undefined "'. Cám ơn vì đã xác nhận. –

+0

Bạn cũng có thể sử dụng '!!' như 'if (!! myobj) {doSomething();}' để kiểm tra đối tượng. Nó chuyển đổi đối tượng thành boolean và sau đó đảo ngược nó một lần nữa. Nhìn vào [this] (http://stackoverflow.com/a/10597474) câu trả lời cho một lời giải thích rất tốt. –

Trả lời

23

Tôi không nghĩ rằng bạn có thể làm cho rằng bất kỳ đơn giản, nhưng bạn chắc chắn có thể refactor logic vào một chức năng:

function isRealValue(obj) 
{ 
return obj && obj !== 'null' && obj !== 'undefined'; 
} 

Sau đó, ít nhất là mã của bạn trở thành:

if (isRealValue(yourObject)) 
{ 
doSomething(); 
} 
+0

Tôi thích câu trả lời của bạn vì nó có thể tái sử dụng và ** rất dễ đọc. Tuy nhiên, tôi chỉ tìm thấy một cách hiệu quả hơn để thực hiện kiểm tra thực tế. –

1

có lẽ như thế này

if (typeof object !== "undefined" || object !== null) 
    // do something 
+0

'đối tượng' là [không phải là từ dành riêng] (http://es5.github.com/#x7.6.1.1). –

+0

@JamesAllardice. bạn có quyền. Tôi đã xóa nhận xét –

+0

Chức năng này không tương đương với chức năng gốc? Ông đặc biệt kiểm tra một chuỗi với giá trị "null". Xem: http://jsfiddle.net/7eYKN/ – aquinas

4

Nếu object là sự thật, chúng tôi đã biết rằng nó không phải là null hoặc undefined (giả định rằng các giá trị chuỗi là một sai lầm). Tôi giả định rằng không phải là null và không phải là undefined thử nghiệm là muốn.

Nếu có, so sánh đơn giản với null hoặc undefined là để so sánh != null.

if(object != null){ 
    doSomething(); 
} 

Chức năng doSomething sẽ chỉ chạy nếu object không phải là null cũng không undefined.

+0

Không: "Đôi khi nó có chuỗi" null "hoặc" undefined "." Điều này sẽ không hoạt động nếu giá trị có một chuỗi REAL trong nó: http://jsfiddle.net/7eYKN/1/ – aquinas

+0

@aquinas: Tôi thấy nhận xét đó dưới câu hỏi, nhưng không có đủ đại diện để trả lời. Câu hỏi sẽ là sau đó những gì có nghĩa là "đôi khi". Tôi nghĩ người hỏi đang cho chúng ta một số mã ấn tượng thay vì biểu diễn mã thực sự. Có, đôi khi một người có thể muốn so sánh với chuỗi '" null "", nhưng đó không phải là một kịch bản phổ biến, nhưng thường thấy chuỗi '' undefined "' vì 'typeof foo ===" undefined " '. Vì vậy, câu trả lời của tôi cố gắng để có được cốt lõi của những gì thường được mong muốn vì câu hỏi dường như không đại diện cho bất kỳ ví dụ thế giới thực phổ biến nào. – scatter

+0

@aquinas: Nếu tôi có thêm đại diện, tôi cũng nhận xét rằng mã SnakeEyes sẽ luôn cung cấp kết quả 'đúng'. – scatter

10

Nếu bạn có jquery, bạn có thể sử dụng $ .isEmptyObject().

$.isEmptyObject(null) 
$.isEmptyObject(undefined) 
var obj = {} 
$.isEmptyObject(obj) 

Tất cả các cuộc gọi này sẽ trả về true. Hy vọng nó sẽ giúp

+2

Không trả lời các câu hỏi JavaScript với jQuery. jQuery không tương thích ngược với JavaScript, nó liên tục thay đổi những thứ đã đăng, bạn tiết kiệm 1KB ở đây hoặc ở đó bằng cách bán 70KB trên máy khách khi trình duyệt của họ có thể xử lý * real * JavaScript và nó có hiệu suất khủng khiếp so với biết cách lập trình thành thạo . – John

2
if(!!object){ 
    doSomething(); 
} 
Các vấn đề liên quan