2008-09-18 22 views

Trả lời

37

Nếu nó là một đối tượng sau đó bạn chỉ có thể kiểm tra để xem nếu nó là null hoặc undefined và sau đó tải nó nếu nó được.

if (myObject === null || myObject === undefined) { 
    myObject = loadObject(); 
} 

Sử dụng chức năng typeof cũng là một tùy chọn khi nó trả về loại đối tượng được cung cấp. Tuy nhiên, nó sẽ trả về null or undefined nếu đối tượng chưa được tải để nó có thể đun sôi một chút về sở thích cá nhân liên quan đến khả năng đọc.

+1

Không phải là một thử nghiệm như (myObject == null) (hoặc không xác định) đủ, vì đó chính xác là điểm của sự bình đẳng đơn giản? Hoặc tôi đang thiếu một cái gì đó? – PhiLho

+0

@PhiLho - Tùy thuộc vào loại đối tượng, đối tượng có thể là rỗng hoặc có thể không xác định được. JavaScript coi chúng là hai thứ khác nhau. – rjzii

+7

@Rob @PhiLho Điều này: 'x == null' tương đương với điều này:' x === null || x === undefined' (trong điều kiện là biến toàn cục 'undefined' chưa được sửa đổi). Vì vậy, thay vì biểu thức của bạn, bạn chỉ có thể viết 'myObject == null'. Nó không chỉ nhỏ hơn, mà còn mạnh mẽ hơn vì nó không quan tâm đến việc gán cho biến 'undefined'. –

1

typeof(obj) sẽ trả về "đối tượng" cho đối tượng của một lớp trong số các giá trị có thể khác.

27
if(typeof(o) != 'object') o = loadObject(); 
+9

Hãy nhớ rằng typeof trả về "đối tượng" cho giá trị rỗng, vì vậy bạn có thể muốn một cái gì đó như [if (null! == x && 'object' == typeof (x)) {] –

3

Tôi không chắc chắn ý của bạn là "đã tải" ... biến số object tồn tại và chỉ đơn giản là không có loại bạn muốn? Trong trường hợp đó, bạn sẽ muốn một cái gì đó như:

function isObjectType(obj, type) { 
    return !!(obj && type && type.prototype && obj.constructor == type.prototype.constructor); 
} 

và sau đó sử dụng if (isObjectType(object, MyType)) { object = loadObject(); }.

Nếu object không được phổ biến với bất cứ điều gì trước khi thử nghiệm của bạn (ví dụ: - typeof object === 'undefined') sau đó bạn chỉ cần:

if ('undefined' === typeof object) { object = loadObject(); } 
3

Bạn có thể muốn xem nếu một đối tượng nhất định là định nghĩa

Đặc biệt nếu được thực hiện trong một chuỗi không đồng bộ với một setTimeout để kiểm tra khi nó bật lên.

var generate = function() 
    { 
     window.foo = {}; 
    }; 
    var i = 0; 
    var detect = function() 
    { 
    if(typeof window.foo == "undefined") 
    { 
      alert("Created!"); 
      clearInterval(i); 
    } 
    }; 
    setTimeout(generate, 15000); 
    i = setInterval(detect, 100); 

nên trong lý thuyết phát hiện khi window.foo xuất hiện.

2

Nếu bạn muốn phát hiện một đối tượng tùy chỉnh:

// craete a custom object 
function MyObject(){ 

} 

// check if it's the right kind of object 
if(!(object instanceof MyObject)){ 
    object = new MyObject(); 
} 
2

Bạn cũng có thể chỉ cần sử dụng một phím tắt if(obj)

3

Nếu bằng cách tải bạn có nghĩa là xác định, bạn có thể kiểm tra kiểu của biến với typeof chức năng. TUY NHIÊN typeof có một vài quirks, và sẽ xác định một đối tượng, một Array, và một rỗng như một đối tượng

alert(typeof(null)); 

Xác định một null như một đối tượng được xác định có lẽ sẽ gây ra chương trình của bạn sẽ thất bại, vì vậy kiểm tra với một cái gì đó giống như

if(null !== x && 'object' == typeof(x)){ 
    alert("Hey, It's an object or an array; good enough!"); 
} 
4
myObject = myObject || loadObject(); 
1
if (!("someVar" in window)) { 
    someVar = loadObject(); 
} 

sẽ cho bạn biết trước bất kỳ JS đã gán cho globa l someVar hoặc được tuyên bố là cấp cao nhất var someVar.

Điều đó sẽ hoạt động ngay cả khi giá trị được tải là undefined.

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