js中的Object.seal()与Object.freeze()
关键字:seal, freeze, property descriptor。
1、Object.seal()
参考文档(2)中这样描述:
The
Object.seal()method seals an object, preventing new properties from being added to itand marking all existing properties as non-configurable.
Values of present properties can still be changed as long as they are writable.
主要就是两点:
- 阻止添加新属性;
- 现有属性变得non-configurable.
第一点好理解;第二点需要搞清楚non-configurable是什么意思,configurable在这篇博文中有详细解释,
这里再贴一遍:
当configurable设为false时,
1、不可以通过delete去删除该属性从而重新定义属性;
2、不可以转化为访问器属性;
3、configurable和enumerable不可被修改;
4、writable可单向修改为false,但不可以由false改为true;
5、value是否可修改根据writable而定。
理解了configurable的意思,也就能理解为啥会有这个句话了:被封的对象仍可能可以修改对象的属性值。
Values of present properties can still be changed as long as they are writable.
2、Object.freeze()
参考文档(3)中这样描述:
The
Object.freeze()method freezes an object. A frozen object can no longer be changed;freezing an object prevents new properties from being added to it,
existing properties from being removed,
prevents changing the enumerability, configurability, or writability of existing properties,
and prevents the values of existing properties from being changed.
In addition, freezing an object also prevents its prototype from being changed.
此函数“冰冻”对象本身以及一切现有的属性值(value)以及属性的特性(property descriptor)。
在函数Object.seal()中也许还可以修改属性值以及修改 属性的特性writable(true-->false),
但是在Object.freeze()中,这些都干不了。
参考文档:
(1)https://www.cnblogs.com/tlz888/p/10389532.html
(2)https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal
(3)https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
js中的Object.seal()与Object.freeze()的更多相关文章
- js中的new操作符与Object.create()的作用与区别
js中的new操作符与Object.create()的作用与区别 https://blog.csdn.net/mht1829/article/details/76785231 2017年08月06日 ...
- ECMA5.1中Object.seal()和Object.freeze()的区别
1 Object.seal(O)的调用 When the seal function is called, the following steps are taken: If Type(O) i ...
- JS中的相等性判断===, ==, Object.is()
首发地址:http://www.geeee.top/2019/11/15/equality-comparisons/,转载请注明出处 相信刚接触JS的人都会被他的想等性判断给整糊涂,看看下面代码,你能 ...
- 小tips:JS中this操作执行像(object.getName = object.getName)()操作改变了this
var name = "The window"; var object = { name: "My Object", getName: function(){ ...
- js中的window.open返回object的错误
系统中用javascript中的window.open后,页面返回了一个[object].因为系统的原因,必需使用href="javascript:window.open()"这样 ...
- ES5 对象的扩展(Object.preventExtensions)、密封(Object.seal)和冻结(Object.freeze)
前面提到 ES5 对象属性描述符,这篇看看对象的扩展.密封和冻结. 扩展对象 Object.preventExtensions Object.isExtensible 密封对象 Object.seal ...
- 浅解析js中的对象
浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...
- js基础知识温习:js中的对象
在JavaScript中对象是一个无序属性的集合,其属性可以包含基本值.对象或者函数. 对象最简单的创建方式 JavaScript中创建对象最简单的方式就是创建一个Object对象的实例,然后再添加属 ...
- 关于js中的时间处理
关于js编程, 主要是, 绝大部分是用 jquery. 但是, js原生的一些方法和属性也是要掌握的, 这个只是在 遇到的时候, 记一下就好了, 如: event的relatedTarget属性: 主 ...
随机推荐
- RabbitMQ 中 Connection 和 Channel 详解
我们知道无论是生产者还是消费者,都需要和 RabbitMQ Broker 建立连接,这个连接就是一条 TCP 连接,也就是 Connection. 一旦 TCP 连接建立起来,客户端紧接着可以创建一个 ...
- Service Fabric Cluster Manager
作者:潘罡 (Van Pan)@ Microsoft 我们回到Service Fabric最底层的话题,谈谈Service Fabric是怎么工作的. 首先,我们回到下面的文档,看看Service F ...
- 安装lsb_release
lsb_release命令用来查看当前系统的发行版信息(prints certain LSB (Linux Standard Base) and Distribution information.). ...
- c# lock的误解
一直以为lock 一个实例就可以了,没想到实例的类型还是有区别的 static object lockObjStatic = new object(); object lockObj = new ob ...
- Java并发编程原理与实战四十三:CAS ---- ABA问题
CAS(Compare And Swap)导致的ABA问题 问题描述 多线程情况下,每个线程使用CAS操作欲将数据A修改成B,当然我们只希望只有一个线程能够正确的修改数据,并且只修改一次.当并发的时候 ...
- Swiper点击后自动轮播停止情况
用户操作swiper之后,是否禁止autoplay.默认为true:停止. 如果设置为false,用户操作swiper之后自动切换不会停止,每次都会重新启动autoplay. 操作包括触碰,拖动,点击 ...
- windows下用python转换markdown到html
方法一: 安装markdown, pip install markdown, 安装好后,python -m markdown xxx.md -f xxx.html 方法二:安装markdown2, p ...
- Android 动态添加线性布局(.java文件内) 实现控件按比例分割空间
这里实现 两个 编辑框同一水平上 按1:1分割空间 这里的1:1 比例可以通过 lp1.weight : 1p2.weight =m:n 实现 { LinearLayout l=new Linea ...
- node.js 基础篇
日志输出方式 node test.js 2>error.log 1>info.log 如果需要日志文件追加 node test.js 2>>error.log 1>> ...
- 基于Netty4.1.29.Final的helloworld实现.使用idea
服务端: //服务端 public class Server { public static void main(String[] args) { //创建两个线程组 EventLoopGroup c ...