JS对象的可枚举属性和不可枚举属性
昨天在写文章(转载)的时候发现了有些对象的方法是分可枚举性和不可枚举性的。
简单的查了一下资料,今天来捋一捋啥是对象的可枚举啥是不可枚举。
可枚举性:
对象的每一个属性都有一个描述对象,用来描述和控制该属性的行为,用Object.getOwnPropertyDescriptor方法来获取该描述对象(用Object.defineProperty方法来设置)。
然后这个Object.defineProperty的方法不是vue双向数据绑定的原理吗!!下次再说…
描述对象的enumerable属性,称为”可枚举性“,如果该属性为false,就表示某些操作会忽略当前属性。
   let obj = { start: '123' };
    console.log(Object.getOwnPropertyDescriptor(obj, 'start'))
   // 输出内容:
     configurable: true
     enumerable: true
     value: "123"
     writable: true
下面,我们分别介绍下对象属性的描述对象的4个属性:
1.configurable:表示能否通过delete删除此属性,能否修改属性的特性,或能否修改把属性修改为访问器属性,如果直接使用字面量定义对象,默认值为true
2.enumerable: 表示该属性是否可枚举,即是否通过for-in循环或Object.keys()返回属性,如果直接使用字面量定义对象,默认值为true
3.writable: 能否修改属性的值,如果直接使用字面量定义对象,默认值为true
4.value: 该属性对应的值,默认为undefined
经过以上的一些操作,我还是不是很真切的理解可枚举性。那就举一个例子
 let obj = {};
    Object.defineProperties(obj, {
        name: {
            value: '祖宗',
            enumerable: false,  //不可枚举
        },
        age: {
            value: 88,
            enumerable: true,   //可枚举
        }
    })
    for (let key in obj) {
        console.log("key:" + key + ',' + 'value:' + obj[key])
    }

只有可枚举的内容被for in 循环出来了
有没有感觉清晰了很多!!
(在这里感谢大佬提点!)
这就是个属性,如果false遍历就拿不到了,true遍历就能拿到了…(研究完了发现超简单诶。尴尬)
目前,有四个操作会忽略enumerable为false的属性。
for…in循环:只遍历对象自身的和继承的可枚举的属性。
Object.keys():返回对象自身的所有可枚举的属性的键名。
JSON.stringify():只串行化对象自身的可枚举的属性。
Object.assign(): 忽略enumerable为false的属性,只拷贝对象自身的可枚举的属性。
然后明儿写原生js实现vue中的双向数据绑定~~
JS对象的可枚举属性和不可枚举属性的更多相关文章
- JS中的可枚举属性与不可枚举属性以及扩展
		在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ... 
- js中的可枚举属性与不可枚举属性
		在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ... 
- JavaScript中的可枚举属性与不可枚举属性
		在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ... 
- <JavaScript>可枚举属性与不可枚举属性
		在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ... 
- 【Javascript-基础-getOwnPropertyNames】Object.getOwnPropertyNames() 获取对象自身可枚举属性
		可枚举属性和不可枚举属性 在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for-in查找遍历到. 可枚举属性 e ... 
- js对象系列【一】深层理解对象与原型
		我们先从盘古开天辟地时捋一捋对象: 从宏观内容来讲,javascript是一个属性的集合,包括值,函数,而整个集合也可以类比为一个对象. js = { a的变量名: a的值, ... 函数b: fun ... 
- JS对象的拷贝
		1:对数据进行备份的时候,如果这个数据是基本的数据类型,那么很好办,通过赋值实现复制即可. 赋值与浅拷贝的区别 var obj1 = { 'name' : 'zhangsan', 'age' : '1 ... 
- js 对象可枚举属性以及for in 循环和for of 循环
		js中每个对象的属性(js里万物皆属性,对象的属性也是对象)都有一个属性叫enumerable(可枚举性),这个属性true/false决定了该对象的属性是否可枚举(就是让一些方法访问到这个属性). ... 
- JS 对象属性相关--检查属性、枚举属性等
		1.删除属性 delete运算符可以删除对象的属性 delete person.age //即person不再有属性age delete person['age'] //或者这样 delete只是断开 ... 
随机推荐
- Xversion for Mac优秀的SVN客户端功能特色介绍
			xversion for mac是一款专为macOS打造的svn客户端,该软件拥有一个设计精美的界面以及全面的功能,简介的用户界面可以让您做到无需浏览用户手册即可熟练使用.xversion支持从最开始 ... 
- 使用canvas给图片添加水印, canvas转换base64,,canvas,图片,base64等转换成二进制文档流的方法,并将合成的图片上传到服务器,
			一,前端合成带水印的图片 一般来说,生成带水印的图片由后端生成,但不乏有时候需要前端来处理.当然,前端处理图片一般不建议,一方面js的处理图片的方法不全,二是有些老版本的浏览器对canvas的支持度不 ... 
- python操作pymysql
			#_author:来童星#date:2019/12/19import pymysql#1.打开数据库连接db=pymysql.connect('localhost','root','root','te ... 
- 【LeetCode 9】回文数
			题目链接 [题解] 还是要注意,取反的时候,-2^31 取反的话会爆掉Int..(因为int的正数最多到2^31-1) [代码] class Solution { public: bool isPal ... 
- 使用pangolin库画出轨迹
			https://github.com/stevenlovegrove/Pangolin cmake_minimum_required(VERSION 2.8) project(chapter3) ) ... 
- ASP.NET Core学习——前言
			跌跌撞撞,公司的新项目终于要在这个月月底上线. 新项目使用ASP.NET Core来做,以前没接触过这方面的内容,只能一边学习,一边搞开发. 眼看项目上线在即,工作没那么忙,也不需要天天加班. 回想了 ... 
- Openstack 中的消息总线 & AMQP
			目录 目录 消息总线 消息总线的原理 AMQP 消息总线 Openstack 采用了面向服务的开发模式(有别于面向对象和面向过程),需要我们去考虑各个服务之间和各项目之间是如何传递消息的. Restf ... 
- 你真的懂return吗?
			递归算法中什么时候用return啥时候不用呢? 使用2个例子来说明:快速排序和二分查找 # 二分查找def binarySearch (arr, l, r, x): # 基本判断 if r >= ... 
- explain分析sql语句执行效率
			Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优 ... 
- 如何设置linux启动过程中的停止阶段
			设置方法: 1 启动过程中点击“e”键(fedora)或者"tab"(centOS)键进入目标启动项的命令行参数下,移除initrd所在行末尾的"quiet" ... 
