2011-01-20 37 views
49

Tôi cố gắng để cảnh báo một giá trị trả về từ một hàm và tôi có được điều này trong báo[Object Object] có nghĩa là gì?

[đối tượng Object]

đây là mã javascript

<script type="text/javascript"> 
$(function() 
{ 
var $main = $('#main'), 
    $1 = $('#1'), 
    $2 = $('#2'); 

$2.hide(); // hide div#2 when the page is loaded 

$main.click(function() 
{ 
    $1.toggle(); 
    $2.toggle(); 
}); 

$('#senddvd').click(function() 
{ 
    alert('hello'); 
    var a=whichIsVisible(); 
    alert(whichIsVisible()); 
}); 


function whichIsVisible() 
{ 
    if (!$1.is(':hidden')) return $1; 
    if (!$2.is(':hidden')) return $2; 
} 

}); 

</script> 

whichIsVisible là chức năng mà tôi đang cố gắng kiểm tra trên

+2

Nó có nghĩa là datatype những gì bạn đang trả lại một đối tượng là. –

+0

Không quan tâm: bạn mong đợi điều gì sẽ trở lại? – Dancrumb

+1

Bạn nên sử dụng bảng điều khiển JavaScript để quan sát các đối tượng bạn quan tâm (ví dụ: Firebug). –

Trả lời

23

Chuyển đổi mặc định từ một đối tượng thành chuỗi là "[object Object]".

Như bạn đang đối phó với các đối tượng jQuery, bạn có thể muốn làm

alert(whichIsVisible()[0].id); 

in ID của phần tử.

Như đã đề cập trong các ý kiến, bạn nên sử dụng công cụ bổ sung như Firebug cho Firefox để nội quan đối tượng bằng cách làm console.log(whichIsVisible()) thay vì alert (không cần công cụ bổ sung trong Chrome hoặc Safari).

Sidenote: ID không được bắt đầu bằng chữ số.

+0

[ \t Trong HTML5, ID có thể bắt đầu bằng chữ số.] (Http: // www .whatwg.org/specs/web-apps/current-work/multipage/elements.html # the-id-attribute) –

+0

@Matt Ball: Cảm ơn, tôi không chắc chắn về điều đó. –

+0

Nói chung tôi muốn quan tâm rằng các đối tượng có thể không CÓ thuộc tính id; ví dụ, nếu bạn có một danh sách đối tượng chỉ cần sử dụng một bộ chọn css như $ ('. someStyleClass'). Để rõ ràng về danh tính của bất kỳ đối tượng nào bạn đang xử lý, nó có thể hữu ích hoặc ít nhất là thú vị khi gán siêu dữ liệu đối tượng của bạn bằng hàm jquery .data(), http://api.jquery.com/data/ – jsh

11

Đó là giá trị được trả về bởi hàm toString() của đối tượng đó.


Tôi hiểu những gì bạn đang cố gắng làm, vì tôi đã trả lời your question yesterday về việc xác định div nào hiển thị. :)
Chức năng whichIsVisible() trả về một đối tượng jQuery thực tế, bởi vì tôi nghĩ rằng sẽ có nhiều hơn lập trình hữu ích. Nếu bạn muốn sử dụng chức năng này cho các mục đích gỡ lỗi, bạn chỉ có thể làm điều gì đó như thế này:

function whichIsVisible_v2() 
{ 
    if (!$1.is(':hidden')) return '#1'; 
    if (!$2.is(':hidden')) return '#2'; 
} 

Điều đó nói rằng, bạn thực sự nên sử dụng một trình gỡ lỗi thích hợp hơn alert() nếu bạn đang cố gắng để gỡ lỗi một vấn đề. Nếu bạn đang sử dụng Firefox, Firebug thật tuyệt vời. Nếu bạn đang sử dụng IE8, Safari hoặc Chrome, chúng có trình gỡ rối tích hợp sẵn.

13

[object Object] là đại diện toString mặc định của đối tượng trong javascript.

Nếu bạn muốn biết các thuộc tính của đối tượng của bạn, chỉ cần foreach qua nó như thế này:

for(var property in obj) { 
    alert(property + "=" + obj[property]); 
} 

Trong trường hợp cụ thể của bạn, bạn đang nhận được một đối tượng jQuery. Hãy thử thực hiện việc này thay thế:

$('#senddvd').click(function() 
{ 
    alert('hello'); 
    var a=whichIsVisible(); 
    alert(whichIsVisible().attr("id")); 
}); 

Điều này sẽ cảnh báo id của phần tử hiển thị.

4

[object Object] là biểu diễn chuỗi mặc định của JavaScript Object.Đó là những gì bạn sẽ nhận được nếu bạn chạy mã này:

alert({}); // [object Object] 

Bạn có thể thay đổi đại diện mặc định bằng cách ghi đè các phương pháp toString như vậy:

var o = {toString: function(){ return "foo" }}; 
alert(o); // foo 
+3

Mà gần như chắc chắn không phải là những gì anh ta muốn làm. –

+0

Đúng, chỉ minh họa nơi chuỗi '[đối tượng]' xuất phát từ đó. –

2

Bạn có một đối tượng javascript

$1$2 là đối tượng jquery, có thể sử dụng alert($1.text()); để nhận văn bản hoặc alert($1.attr('id'); vv ...

bạn phải xử lý $1$2 như đối tượng jQuery.

52

Như những người khác đã lưu ý, đây là tuần tự hóa mặc định của một đối tượng. Nhưng tại sao lại là [object Object] và không chỉ là [object]?

Đó là vì có nhiều loại đối tượng khác nhau trong Javascript!

  • Chức năng đối tượng:
    stringify(function(){}) ->[object Function]
  • Mảng các đối tượng:
    stringify([]) ->[object Array]
  • RegExp đối tượng
    stringify(/x/) ->[object RegExp]
  • ngày đối tượng
    stringify(new Date) ->[object Date]
  • ... several more ...
  • Object đối tượng!
    stringify({}) ->[object Object]

Đó là bởi vì các chức năng constructor được gọi Object (với số vốn "O"), và thuật ngữ "đối tượng" (với nhỏ "o") đề cập đến tính chất cấu trúc của thingy .

Thông thường, khi bạn đang nói về "đối tượng" trong Javascript, bạn thực sự là có nghĩa là "Đối tượng đối tượng" chứ không phải các loại khác.

... nơi stringify sẽ trông như thế này:
function stringify (x) { console.log(Object.prototype.toString.call(x)); }

+0

Nếu toString() không bị ghi đè trong một đối tượng tùy chỉnh: mỗi [tài liệu] (https://es5.github.io/x15.2.html#x15.2.4.2) 15.2.4.2 Object.prototype.toString() # Ⓣ Ⓔ Ⓡ Khi phương thức toString được gọi, thực hiện các bước sau: Nếu giá trị này không xác định, hãy trả về "[đối tượng Không xác định]". Nếu giá trị này là null, trả về "[object Null]". Cho O là kết quả của việc gọi ToObject truyền giá trị này làm đối số. Để lớp là giá trị của thuộc tính bên trong [[Class]] của O. Trả về giá trị String là kết quả của việc nối ba Chuỗi "[đối tượng", lớp và "]". –

+0

cộng một cho thuật ngữ 'thingy' – Jay

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