檢查屬性是否存在物件內
當你檢查屬性是否存在目前的物件內,你或許可以這麼做:
var myObject = {
name: '@tips_js'
};
if (myObject.name) { ... }
以上的方法是沒問題的,但是你必須知道對於這個問題有兩個原生的方法,in
運算符和 Object.hasOwnProperty
。任何繼承 Object
的都可以使用這兩種方法。
觀察之間較大的差別
var myObject = {
name: '@tips_js'
};
myObject.hasOwnProperty('name'); // true
'name' in myObject; // true
myObject.hasOwnProperty('valueOf'); // false, valueOf 繼承自原型鏈結
'valueOf' in myObject; // true
兩者不同的地方在於確認的屬性深度不同。換句話說,如果直接在物件內確認 key 是可用的話,hasOwnProperty
只會回傳 true。然而,在 in
運算符沒辦法分辨之間的屬性是建立在物件或是繼承自原型鏈結的。
這裡有其他的範例:
var myFunc = function() {
this.name = '@tips_js';
};
myFunc.prototype.age = '10 days';
var user = new myFunc();
user.hasOwnProperty('name'); // true
user.hasOwnProperty('age'); // false, 因為 age 是繼承自原型鏈結
MEET THE NEW JSTIPS BOOK
You no longer need 10+ years of experience to get your dream job.
Use the 100 answers in this short book to boost your confidence and skills to ace the interviews at your favorite companies like Twitter, Google and Netflix.
GET THE BOOK NOW
MEET THE NEW JSTIPS BOOK
The book to ace the JavaScript Interview.
A short book with 100 answers designed to boost your knowledge and help you ace the technical interview within a few days.
GET THE BOOK NOW