2012-02-22 68 views
32
If(somevar.hasOwnProperty('someProperty')) { 
// do something(); 
} else { 
// do sometingelse(); 
} 

Quyền sử dụng/giải thích thích hợp của hasOwnProperty('someProperty') là gì?Javascript tài sản trong hasOwnProperty là gì?

Tại sao chúng tôi không thể sử dụng đơn giản somevar.someProperty để kiểm tra xem đối tượng somevar có chứa thuộc tính có tên someProperty không?

Thuộc tính trong trường hợp này là gì?

javascript này kiểm tra thuộc tính nào?

+2

http://stackoverflow.com/questions/2600085/hasownproperty-in-javascript –

+0

Khi tôi hỏi câu hỏi này, tôi nghĩ rằng đó là một chức năng kiểm tra một số html. Bây giờ tôi thấy nó kiểm tra một đối tượng javascript hoặc phương pháp cho một 'biến' trong đối tượng hoặc phương pháp đó. thnx! – FLY

+0

Hãy xem https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/HasOwnProperty –

Trả lời

61

hasOwnProperty trả về giá trị boolean cho biết đối tượng mà bạn đang gọi có thuộc tính có tên đối số hay không. Ví dụ:

var x = { 
    y: 10 
}; 
console.log(x.hasOwnProperty("y")); //true 
console.log(x.hasOwnProperty("z")); //false 

Tuy nhiên, nó không nhìn vào chuỗi nguyên mẫu của đối tượng.

Thật hữu ích khi sử dụng nó khi bạn liệt kê các thuộc tính của đối tượng có cấu trúc for...in.

Nếu bạn muốn xem toàn bộ chi tiết, thì ES5 specification luôn là một nơi tốt để xem.

+3

Điểm thưởng cho chuỗi mẫu thử nghiệm. Vẫn cố gắng tìm ra những gì nó kêu gọi khi nó không được gọi trên một vật thể ...nó không phải là 'cửa sổ' –

+0

@KristofferSHansen - Tôi đã tự hỏi rằng quá, nhưng câu hỏi đã được chỉnh sửa để nó bây giờ đang được gọi trên một đối tượng. Khi không, một lỗi được ném ra. –

+0

Tôi cho rằng thay đổi mọi thứ. Không có lỗi khi chạy từ bảng điều khiển trong Chrome. –

7

nó sẽ kiểm tra:

Trả về một giá trị logic Boolean cho biết một đối tượng có thuộc tính với tên được chỉ định

Phương pháp hasOwnProperty trả về true nếu đối tượng có một tài sản của tên được chỉ định, false nếu nó không . Phương thức này không kiểm tra xem thuộc tính có tồn tại trong chuỗi nguyên mẫu của đối tượng hay không; thuộc tính phải là thành viên của đối tượng.

Ví dụ:

var s = new String("Sample"); 
document.write(s.hasOwnProperty("split"));      //false 
document.write(String.prototype.hasOwnProperty("split"));   //true 
+0

y - 1?/Tôi có hiểu sai không? –

+1

Tôi đưa ra -1 vì câu trả lời ban đầu của bạn là một câu ngắn và hoàn toàn không mạch lạc, sau đó được cập nhật thành câu dài hơn, hơi mạch lạc hơn, nhưng hoàn toàn không chính xác. –

+0

@ amnotiam- nhưng tôi nghĩ rằng nó rõ ràng nhiều bây giờ ... của nó vì vấn đề internet của tôi tôi không thể đăng bài nhiều hơn nữa .......... –

0

checks if an object has a property. Nó hoạt động giống như if(obj.prop), theo như tôi biết.

+3

'obj.prop' theo chuỗi nguyên mẫu,' hasOwnProperty' không –

+3

Vấn đề là khi 'prop' có giá trị sai. 'if (obj.hasOwnProperty ('prop'))' sẽ là 'true' trong khi' if (obj.prop) 'sẽ là' false'. –

1

hasOwnProperty là hàm Javascript bình thường có đối số chuỗi.

Trong trường hợp của bạn somevar.hasOwnProperty ('someProperty') nó kiểm tra các chức năng someVar có somepropery hay không ,, nó trở thành sự thật và sai

Say

function somevar() { 
    this.someProperty= "Generic"; 
    } 

function welcomeMessage() 
{ 
    var somevar1= new somevar(); 
     if(somevar1.hasOwnProperty("name")) 
{ 
alert(somevar1.hasOwnProperty("name"));// it will return true 
} 
} 
1

Bạn sử dụng object.hasOwnProperty (p) để xác định xem đối tượng có một p đếm tài sản -

đối tượng có thể có riêng của mình nguyên mẫu, trong đó các phương thức và thuộc tính 'mặc định' được gán cho mọi đối tượng của đối tượng. hasOwnProperty chỉ trả về true cho các thuộc tính được đặt cụ thể trong hàm tạo, hoặc được thêm vào cá thể sau này.

để xác định xem p được định nghĩa ở tất cả, bất cứ nơi nào, cho đối tượng, sử dụng if (p đối tượng instanceof), trong đó p để đánh giá một chuỗi bất động sản có tên tuổi.

Ví dụ: theo mặc định, tất cả các đối tượng đều có phương thức 'toString', nhưng nó sẽ không hiển thị trong hasOwnProperty.

0

Tôi cũng đã viết thành phần đơn giản này object-hasOwnProperty có thể tái sử dụng trả về boolean để kiểm tra xem đối tượng có thuộc tính được chỉ định hay không. Nó có 2 ví dụ và 3 bài kiểm tra có thể giúp hiểu rõ hơn về hành vi trường hợp sử dụng thực tế.

Ví dụ:

hasOwnProperty({foo: 'bar'}, 'foo') // => true 
hasOwnProperty({foo: 'bar'}, 'bar') // => false 

Tested trường hợp sử dụng:

hasOwnProperty() should return false as given object do not contain key `bar` 
hasOwnProperty() should return true as given object contains key `foo` 
hasOwnProperty() should return false if key is null 

Ở đây nó như thế nào nó hoạt động:

function hasOwnProperty(obj: {}, prop: string|number): boolean { 
    return Object.prototype.hasOwnProperty.call(obj, prop); 
}; 
3

Dưới đây là trả lời ngắn gọn và chính xác:

Trong javascript , mọi đối tượng đều có bánh bao ch của các cặp khóa-giá trị tích hợp có siêu thông tin về đối tượng. Khi bạn lặp qua tất cả các cặp khóa-giá trị bằng cách sử dụng cấu trúc/vòng lặp for...in cho một đối tượng bạn đang lặp qua cặp khóa-giá trị thông tin meta này (bạn chắc chắn không muốn).

enter image description here

Sử dụng hasOwnPropery(property)lọc-out những không cần thiết lặp thông qua meta-thông tin và trực tiếp kiểm tra đó là tham số property là người sử dụng bất động sản được đưa ra trong các đối tượng hay không. Bởi bộ lọc-out, ý tôi là, hasOwnProperty(property) không giống nhau, property tồn tại trong chuỗi mẫu của Object hay còn gọi là siêu thông tin.

Nó trả về boolean true/false dựa trên đó.

Dưới đây là một ví dụ:

var fruitObject = {"name": "Apple", "shape": "round", "taste": "sweet"}; 
 
console.log(fruitObject.hasOwnProperty("name")); //true 
 
console.log(Object.prototype.hasOwnProperty("toString");) //true because in above snapshot you can see, that there is a function toString in meta-information

Tôi hy vọng đó là rõ ràng!

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