2014-06-27 28 views
5

khác nhau từ obj != null;Object (obj) === obj làm gì?

Tôi biết rằng obj != null sẽ phát hiện bất cứ điều gì được phép có thuộc tính trên nó như vô giá trị và không xác định là hai giá trị duy nhất mà không thể có tài sản.

Làm thế nào thực hiện điều này khác với

Object(obj) === obj;

+0

Kết quả không thực sự giống nhau. Lấy ví dụ, một chuỗi hoặc số nguyên thủy: nó là! = Null nhưng đối tượng đóng hộp của nó không phải là === dạng nguyên thủy. –

Trả lời

6

Object(obj) === obj kiểm tra liệu obj là một đối tượng hoặc một nguyên thủy, cũng không cho chuỗi vv

console.log(Object('foo') === 'foo'); // false 
console.log(Object(true) === true); // false 
console.log(Object(null) === null); // false 

var obj = {}; 
console.log(Object(obj) === obj);  // true 

Nó rất hữu ích để xác định nếu giá trị có thể được cung cấp và nhớ thuộc tính được chỉ định.

Trong khi nullundefined lỗi hoàn toàn khi cố gắng sử dụng thuộc tính, đó là lý do tại sao obj != null vẫn hữu ích, no primitive values are able to hold onto properties.

var pri = 'foo'; 
pri.foo = 'bar';  // no error, but still... 
console.log(pri.foo); // undefined 

var box = Object(pri); 
box.foo = 'bar'; 
console.log(box.foo); // 'bar' 

tham khảo:

Khi objnull hoặc undefined, Object(obj) returns a new Object():

1) Nếu giá trịnull, undefined hoặc không được cung cấp, tạo và trả về một mới Đối tượng đối tượng chính xác như là tiêu chuẩn xây dựng trong Object constructor ha d được gọi với cùng một đối số (15.2.2.1).

Và, nguyên thủy dữ liệu boolean, chuỗi, và con số này được đóng hộp vào loại đối tượng của họ thông qua ToObject(), mà không phải là tương đương với các khoản tương đương nguyên thủy của họ:

2) Return ToObject (giá trị).

console.log(typeof 'foo' === 'string');   // true 
console.log(typeof Object('foo') === 'object'); // true 

console.log('foo' instanceof String);   // false 
console.log(Object('foo') instanceof String); // true 
-2

Identity (===.! ==)

Những nhà khai thác cư xử y hệt các nhà khai thác bình đẳng ngoại trừ không chuyển đổi loại được thực hiện, và các loại phải giống nhau để được coi là bình đẳng.

http://www.c-point.com/javascript_tutorial/jsgrpComparison.htm

đẹp Stack Overflow liên kết Which equals operator (== vs ===) should be used in JavaScript comparisons?

Hy vọng nó giúp

+2

Tôi không thấy cách này trả lời câu hỏi. Đây không chỉ là về! = Và! ==, đúng hơn là 'x!= null' và 'Object (x) === x' –

+0

Liên kết đầu tiên cho ý nghĩa của toán tử JS cơ bản và câu trả lời liên kết thứ hai (SO) giải thích tốt hơn nhiều. Hai liên kết này đã cho tôi câu trả lời thuyết phục cho vấn đề. – Kris

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