我们都知道,对象以 key|value的形式存在 它和数组一样可以遍历,对象可以通过for in 去遍历,拿到遍历对象的所有key

某些idea在使用for in 时,提示代码片段中就有出现以下这种情况! (下图)

  • 我们可以看到,里面多了一句 Object.hasOwnProperty(key)的这个玩意,那么它的作用是什么?

Talk is cheap. Show me the code.

/* OK,我们先整一个对象 */
var people = {
name: '李四',
age: 18,
work: '码农'
}; /* 然后我们用for in 去读一遍 people 这个对象的key */
for(const i in people) {
console.log(i);
} /*
log => name, age, work
嗯,输出符合预期,那么我们加一点点骚操作,在 people 对象的原型下挂多一个名为 homeAddress 的key,
然后输出一次 people
*/
people.__proto__.homeAddress = '北京东三环';
console.log(people)

  • 可以发现,people 里面并没有 homeAddress 这个属性,那么我们能否访问(读取)得到它呢?
console.log(people.homeAddress);
/* log => 北京东三环 */
  • 对的,我们发现它可读,但是直接打印 people 时候,它并不存在于 people 对象本身上,它被挂载于 people 对象的原型上,即 people.__proto__
  • 那么我们使用 for in 去遍历对象的时候以及用 key in Object 去查找对象是否包含某个key的时候,都会去查找原型(__proto__)上是否包含这个key
for (const key in people) {
console.log(key)
};
/* log => name, age, work, homeAddress */
'homeAddress' in people;
/* log => true */
  • 正常情况下其实我们比较少用到Object.hasOwnProperty(key)这个方法,但是回去阅读框架源码,底层封装的童鞋们,就会经常在代码中看到这个方法,

    它的主要作用就是把判断范围缩小至对象本身的key
people.hasOwnProperty('name'); //log => true
people.hasOwnProperty('age'); //log => true
people.hasOwnProperty('work'); //log => true
people.hasOwnProperty('homeAddress'); //log => false

hasOwnProperty的作用、配合for in使用 、key in Object判读key的更多相关文章

  1. vue中:key 和react 中key={} 的作用,以及ref的特性?

    vue中:key 和react 中key={} 为了给 vue 或者react 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性 一句话概括就是 ...

  2. vue的v-for循环渲染列表时,解决没有:key警告问题(:key的作用)

    :key是为vue的响应式渲染提供方法,在列表中单条数据改变的情况下,可以进行单独渲染,减少页面资源消耗. 当前页面如果有列表渲染v-for,并且在v-for的循环标签中没有:key元素时,控制台会出 ...

  3. The property 'RowId' is part of the object's key information and cannot be modified.

    2016-10-20 10:19:46,667 [12] ERROR ClientApp.FormDownload - ErrorSystem.InvalidOperationException: T ...

  4. 对于json对像,怎么遍历json对象的所有key,在使用json对象时,如果无法知道key,怎么通过key变量来获取值

    对于json对像,怎么遍历json对象的所有key,在使用json对象时,如果无法知道key,怎么通过key变量来获取值?请参阅下面的关键代码: <html> <head> & ...

  5. pandas对象保存到mysql出错提示“BLOB/TEXT column used in key specification without a key length”解决办法

    问题 将DataFrame数据保存到mysql中时,出现错误提示: BLOB/TEXT column used in key specification without a key length 原因 ...

  6. JavaScript系列-----对象基于哈希存储(<Key,Value>之Key篇) (1)

    1.Hash表的结构 首先,允许我们花一点时间来简单介绍hash表. 1.什么是hash表 hash表是一种二维结构,管理着一对对<Key,Value>这样的键值对,Hash表的结构如下图 ...

  7. 小程序wx:for Do not set same key \"NaN\" in wx:key.

    在使用wx:for的时候出现了Do not set same key \"NaN\" in wx:key. 去网上查看资料,说是使用wx:key 试了一下,没用 字面意思是不要设置 ...

  8. SQLServer 中有五种约束, Primary Key 约束、 Foreign Key 约束、 Unique 约束、 Default 约束和 Check 约束

    一直在关注软件设计方面,数据库方面就忽略了很多,最近在设计数据库时遇到了一些小麻烦,主要是数据库中约束和性能调优方面的应用,以前在学习 Sql Server 2000,还有后来的 Sql Server ...

  9. 1170 - BLOB/TEXT column 'CustomerName' used in key specification without a key length

    [DTF] Data Transfer 企管宝_2_CRM start[DTF] Getting tables[DTF] Analyzing table: `CustomerInfo`[DTF] Ge ...

  10. Xshell配置密钥公钥(Public key)与私钥(Private Key)登录

    ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口令(密码)认证方式是我们最常用的一种,这里介绍密钥认证方式登录到linux/unix的方法. 使用密钥登录分为3步:1.生成密钥( ...

随机推荐

  1. windows server 2012 AD域服务器的搭建安装 子域的创建加入 客户机加入域环境(Active Directory域)

    1,安装Active Directory域前的准备工作 2,安装Active Directory域 3,加入子域(可选) 4,加入客户机 ******************************* ...

  2. jjencode|JS混淆手工解析编码过程以及自定义混淆变体改装

    此前发布过关于aaencode的混淆编码,此篇文章继续说同作者的jjencode混淆编码的具体过程. 介绍 首先是jjencode的作者提供的编码测试页:http://utf-8.jp/public/ ...

  3. format UTF-8 BOM by AX

    #File CommaTextIo commaTextIo; FileIOPermission permission; CustTable custTable; str fileName = @&qu ...

  4. MariaDB简介

    一.什么是数据库 DB 与 DBMS :DB(DataBase)即数据库,存储已经组织好的数据的容器.DBMS(DataBase Manage System)是数据库管理系统用来对数据库及数据库中的数 ...

  5. python求列表中某个值第一次出现的位置

    x=[2,1,1] print(x.index(1)) 结果为1

  6. 最大公约数与最小公倍数_c/c++

    gcd:greatest common divisor,最大公约数   欧几里得算法,也就是辗转相除法.公式:gcd(a, b) = gcd(b, a % b)   推论:gcd(b, a) == g ...

  7. pandas 某几列转为json/dic 格式

    #%% import pandas as pd df=pd.read_excel('工作表.xlsx') col_list=list(df.columns) del_col_list =['c','d ...

  8. react+ant-design-proTable 设置搜索条件中的默认值

    需求: 这个规则组ID的 下拉列表是通过向后端请求获取的,如何设置自定义渲染列表,并且默认有值 let groupLists = [] as any, //规则组列表 defaultValue = ' ...

  9. 在win10上装vmware虚拟机+ubuntu一打开就蓝屏重启怎么办?

    一般就是虚拟机和系统一些性能不兼容导致的 因为我原来装的版本是15.0的vmware,现在重新装了16的vmware

  10. 非常有用的python单行代码

    1 推导式应用 1.1 列表推导式(一行for循环) #For循环在一行 mylist = [200, 300, 400, 500] #正常方式 result = [] for x in mylist ...