今儿个,咱来聊聊JavaScript里头一个挺实用的小玩意儿——hasOwnProperty。这名字听着挺绕口,弄明白,用起来顺手的很。
话说,我最近在倒腾一个项目,需要处理一堆从后台扒拉回来的数据。这些数据,一个个都是对象,里头装着各种各样的属性。我,就得把这些属性一个个拎出来,看看哪个是我需要的,哪个是我可以扔一边儿的。
我用的是最笨的法子,直接用点操作符(.)或者方括号([])去访问对象的属性。这法子,大部分时候都好使,可有时候就掉链子。
问题出在哪儿?就出在JavaScript这对象,它有个“原型链”的玩意儿。简单说,就是一个对象,它不仅有自己肚子里的货(自有属性),还能从它“祖宗”那里继承点儿东西过来(继承属性)。
这继承来的东西,有时候是好东西,能省不少事儿。可有时候,它就成个“坑”。比如,我只想看看这对象自己肚子里有你把祖宗十八代的都翻出来,这不添乱么?
这时候,hasOwnProperty就派上用场。这哥们儿,它能帮你判断,一个属性,到底是对象自己肚子里的,还是从祖宗那里继承来的。要是自己的,它就点点头,说“true”;要是别人的,它就摇摇头,说“false”。
我举个例子,你就明白。
- 第一步:我先弄个对象出来,就叫它
myObject
。
let myObject = { name: '张三', age: 30 };
- 第二步:我想看看
myObject
有没有name
这个属性。
*(*('name'));
- 第三步:结果出来,是
true
。
这说明,name
是myObject
自己的属性,不是继承来的。
再来一个:
- 第一步:我想看看
myObject
有没有toString
这个属性。
*(*('toString'));
- 第二步:这回,结果是
false
。
因为toString
是myObject
从它祖宗那里继承来的,不是它自己的。
自从用hasOwnProperty,我这心里头,敞亮多。再也不用担心,被那些继承来的属性给“坑”。我能清清楚楚地知道,哪些属性是对象自己的,哪些是别人的。
这下,我处理起数据来,更麻利。该留的留,该扔的扔,一点儿不含糊。
总结一下
hasOwnProperty,就像个“照妖镜”,能把对象的自有属性和继承属性,照得清清楚楚。有它,咱再也不用担心被那些“假冒伪劣”的属性给迷惑。这玩意儿,真是个好东西!