2010-09-07 45 views
10

thể trùng lặp:
Null object in javascriptCó phải là một đối tượng trong JavaScript không?

Hi, Tôi đã đọc this thread về null trong JavaScript, nhưng tôi rất bối rối về danh tính của null bây giờ.

Vì được biết typeof(null) đánh giá là object vì số the language design error và ECMA tuyên bố rằng số không là The Null Type.

8.2 The Null Type 
    The Null type has exactly one value, called null. 

Vậy tại sao mọi người tiếp tục nói rằng null là một đối tượng?

Có người nói null là một đối tượng đơn lẻ. Đó có phải là cách mọi người nhìn thấy null như trong JavaScript không?

+1

@ karim79 Có, tôi đã đọc chủ đề đó và đặt câu hỏi của tôi làm nhận xét cho một số câu trả lời, nhưng không nhận được phản hồi, vì vậy tôi đã nêu câu trả lời ở đây. Cảm ơn – c4il

+1

Bạn đã tự trả lời bằng câu trích dẫn. null (một giá trị đại diện cho chính nó - đọc như: "không phải bất cứ điều gì khác" - và null === null, cho tất cả null) là người cư ngụ duy nhất của Null Type. "Tính khách quan" thực tế là, như bạn chỉ ra, mở ra đối số, nhưng các đặc tính của null làm cho nó trở thành một điểm mấu chốt. –

+0

liên kết của bạn "lỗi thiết kế ngôn ngữ" tham khảo tài liệu của Douglas Crockford - Tôi (cá nhân) sẽ không đề nghị bạn lấy mọi thứ ông nói đúng nguyên văn. – Reinsbrain

Trả lời

10

Null là sự vắng mặt của một đối tượng. Không xác định có nghĩa là nó chưa được gán, và null có nghĩa là nó đã được gán là không có gì.

Null không thực sự là một đối tượng đơn lẻ, vì dereferencing nó sẽ gây ra lỗi; for (var x in null) sẽ báo lỗi cho bạn. Hãy suy nghĩ về những ngày con trỏ; null là giá trị con trỏ có khi nó không trỏ đến một đối tượng.

+1

'cho (var x in null);' sẽ không ném trên nhiều trình duyệt, mặc dù nó phải, ít nhất là được chỉ định trên [3rd edition] (http://bclary.com/2004/11/07/#a- 12.6.4) của ECMAScript (thao tác 'ToObject' sẽ ném khi giá trị là' null' hoặc 'undefined'). Nhưng điều này đã thay đổi, bây giờ trên [ECMAScript 5] (http://www.ecma262-5.com/ELS5_HTML.htm#Section_12.6.4), nếu biểu thức là 'null' hoặc' undefined', câu lệnh đơn giản kết thúc (một tuyên bố hoàn thành bình thường). – CMS

+1

Đẹp, đặc tả ECMA trên định dạng HTML. Tôi đã từ lâu tìm kiếm điều đó! :) – c4il

7

Không, null là một trong số ít kiểu nguyên thủy (số khác là số, chuỗi, booleans và không xác định). Mọi thứ khác là một đối tượng, bao gồm các hàm, mảng và các biểu thức chính quy. Các số, chuỗi và boolean thường được gọi là "giống như đối tượng", bởi vì chúng có các phương thức, nhưng chúng không thay đổi. Mặt khác, đối tượng có thể thay đổi.

+0

Tính không ổn định không liên quan gì đến việc trở thành đối tượng. Xem Object.freeze trong EcmaScript 5 cho phép tạo các đối tượng bất biến. Các đối tượng gốc trong EcmaScript 3 cũng là các đối tượng và có thể không thay đổi được. Null không phải là một đối tượng bởi vì nó có thể đáp ứng không có thông báo - không có thuộc tính hoặc phương thức. Đây là lý do tại sao (null instanceof type) là false cho tất cả các loại. –

+1

@mikesamuel: Đã xóa phần "vi phạm" khỏi câu trả lời của tôi :) –

+0

* Giống như đối tượng * có thể là cụm từ sai để mô tả cách nguyên thủy tạm thời được đóng hộp khi cố gắng sử dụng làm đối tượng. – alex

1

null không thể được coi là một đối tượng vì nó không thể có thuộc tính. Đó là từ khóa đại diện cho nguyên thủy, như truefalse.

> true instanceof Object 
false 
> null instanceof Object 
false 
Các vấn đề liên quan