深入javascript对象语法和应用场景(二)

本文深入探讨JavaScript对象的高级特性,包括浅拷贝与深拷贝的区别、实现对象不变性的方式、创建对象常量、禁止对象扩展、对象密封与冻结,以及检查属性存在性和遍历对象的方法。这些知识点对于理解和操作JavaScript对象至关重要。
摘要由CSDN通过智能技术生成

前言

      上一章我们介绍了javascript对象的一些基本用法,这一章我们将继续上一章的内容,讲一些关于javascript进阶的内容

正文

复制对象

      这个就是一个老生常谈的问题了,javascript对象的复制场景分为浅拷贝和深拷贝。浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用(地址),深拷贝拷贝多层,每一级别的数据都会拷贝,关于深浅拷贝,很多文章已经写的很详细,这里就不再赘述,感兴趣或者还不会的同学可以自己查阅资料了解

不变性

      有时候你会希望属性或者对象是不可改变(无论有意还是无意)的,在 ES5 中可以通过很多种方法来实现。很重要的一点是,所有的方法创建的都是浅不变形,也就是说,它们只会影响目标对象和它的直接属性。如果目标对象引用了其他对象(数组、对象、函数,等),其他对象的内容不受影响,仍然是可变的

对象常量

      结合 writable:false 和 configurable:false 就可以创建一个真正的常量属性(不可修改、重定义或者删除)

var myObject = {};
Object.defineProperty( myObject, "FAVORITE_NUMBER", {
	value: 42,
	writable: false,
	configurable: false
} );

禁止扩展

      如 果 你 想 禁 止 一 个 对 象 添 加 新 属 性 并 且 保 留 已 有 属 性, 可 以 使 用 Object.preventExtensions(…)

var myObject = {
	a:2
};
Object.preventExtensions( myObject );
myObject.b = 3;
myObject.b; // undefined

密封

      Object.seal(…) 会创建一个“密封”的对象,这个方法实际上会在一个现有对象上调用Object.preventExtensions(…) 并把所有现有属性标记为 configurable:false。所以,密封之后不仅不能添加新属性,也不能重新配置或者删除任何现有属性(虽然可以修改属性的值)。

冻结

      Object.freeze(…) 会创建一个冻结对象,这个方法实际上会在一个现有对象上调用Object.seal(…) 并把所有“数据访问”属性标记为 writable:false,这样就无法修改它们的值。这个方法是你可以应用在对象上的级别最高的不可变性,它会禁止对于对象本身及其任意直接属性的修改(不过就像我们之前说过的,这个对象引用的其他对象是不受影响的)。

存在性

      前面我们介绍过,如 myObject.a 的属性访问返回值可能是undefined,但是这个值有可能是属性中存储的 undefined,也可能是因为属性不存在所以返回 undefined。那么如何区分这两种情况呢?其实很简单

var myObject = {
	a:2
};
("a" in myObject); // true
("b" in myObject); // false
myObject.hasOwnProperty( "a" ); // true
myObject.hasOwnProperty( "b" ); // false

遍历

      使用 for…in 遍历对象是无法直接获取属性值的,因为它实际上遍历的是对象中的所有可枚举属性,你需要手动获取属性值。for…of 循环每次调用 myObject 迭代器对象的 next() 方法时,内部的指针都会向前移动并返回对象属性列表的下一个值。

小结

      这一章我们介绍了更多有关对象的操作和应用场景,我们一直戏称“函数是javascript的一等公民“,函数作为对象的一种子类型,可见对象在javascript的开发中扮演着重要的角色,大家要着重关注学习
      小伙伴们今天的学习就到这里了,如果觉得本文对你有帮助的话,欢迎转发,评论,收藏,点赞!!!
      每天学习进步一点点,就是领先的开始。如果想继续提高,欢迎关注我,或者关注公众号”祯民讲前端“。大量前端技术文章,面试资料,技巧等助你更进一步!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值