判斷對象是否有某個屬性
阿新 • • 發佈:2018-09-26
rop 通過 原因 blog pro js對象 結構 區別 href
/*下面是一個對比,看看在判斷是否包括一個鍵上面,Object結構和Set結構的寫法不同。*/ // 對象的寫法 var myObject = { "mm": "m1", "height": 1, "width": 1 }; if(myObject["mm"]){ console.log(myObject["mm"]); // m1 } //最開始報錯:mm is not defined, 是因為myObject["mm"]寫成了myObject[mm], 沒有加引號 if(myObject.width){ console.log(myObject.width);// 1 } if(myObject.hasOwnProperty(‘height‘)){ console.log(myObject.height); // 1 } /*判斷JS對象是否擁有某屬性 兩種方式,但稍有區別*/ //1.in運算符 console.log(‘mm‘ in myObject); // true console.log(‘toString‘ in myObject); // true //可看到無論是name,還是原形鏈上的toString,都能檢測到返回true。 //2.hasOwnProperty 方法 console.log(myObject.hasOwnProperty(‘mm‘)); //true console.log(myObject.hasOwnProperty(‘toString‘)); // false //原型鏈上繼承過來的屬性無法通過hasOwnProperty檢測到,返回false。 /*這個時候,它會輸出原型的屬性 在很多時候,我們不需要遍歷它原型的屬性,還有一個原因就是,我們現在用到的對象, 我們不能保證,其他開發人員,有沒有,在它的原型上加一些屬性呢?所以呢,我們就 過濾一下我們對象的屬性吧,這個時候就用到了hasOwnProperty方法*/ Object.prototype.say = "hello"; //添加到對象Object上面 for(var i in myObject){ console.log(myObject[i]); // m1 1 1 hello } var test = [1,2,3,4]; Array.prototype.say = "hello"; //添加到數組Array上面 for(var i in test){ console.log(test[i]); // 1 2 3 4 hello } //改進: Object.prototype.say = "hello"; // 添加到對象Object上面 for(var i in myObject){ if(myObject.hasOwnProperty(i)){ console.log(myObject[i]); // m1 1 1 } } var test = [1,2,3,4]; Array.prototype.say = "hello"; //添加到數組Array上面 for(var i in test){ if(test.hasOwnProperty(i)){ console.log(test[i]); // 1 2 3 4 } } //ES6中 Set的寫法 var set = new Set(); set.add("width"); set.add("height"); if(set.has("width")){ console.log(set); //Set {"width", "height"} console.log([...set]); // ["width", "height"] }
摘自博客
判斷對象是否有某個屬性