JavaScript 关于ES6 const 深入理解

发布时间:2019-08-09 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了JavaScript 关于ES6 const 深入理解脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

前端面试大坑千千万,填完一个是一个

关于ES6 const用法

众所周知,const声明之后的变量不可以修改,比如:

const name = 'lijk';
name = 'lijks'  //linshi.htML:15 Uncaught SyntaxError: Identifier 'name' has already been declared

但是今天面试官提出了,如果const 一个object对象的话,是否可以修改属性值,懵逼中...

被怼回来之后回家键入了:

const objs = {name:'lijk'}
objs.name = 'lijks'

没有报错???????
什么情况?经过一顿查询之后得知

上面代码中,常量objs 储存的是一个地址,这个地址指向一个对象。不可变的只是这个地址,即不能把objs 指向另一个地址,但对象本身是可变的,所以依然可以为其添加新属性

如果如下编写

const objs = {name:'lijk'}
objs= {name:'lijks'}

恭喜你,你要的错误来了,正应了如上所述,const的obj是指向Object一个指针(这块可以去看原型链部分),对象本身是可以修改的,但是指针不能。

PS:我是个有脾气的人,我如果十分想冻结这个对象呢?ES6为我们提供了一个新方法

const objs = Object.freeze({name:'lijk'})
objs.name = 'lijks'

如上所示,在非严格情况下第二行代码是无效的
严格模式(use strict)下,第二行部分会报错。

在扩展一次,如果object是一个多层对象???

可以如下所写:

const freezeObjs = (obj) =>{
    Object.freeze(obj);
    Object.keys(obj).forEach((key,i) => {
        if(typeOf obj[key] === 'object'){
            freezeObjs(obj[key]);
        }
    })
}

可以彻底锁死多维对象。。。。

填坑完毕.

脚本宝典总结

以上是脚本宝典为你收集整理的JavaScript 关于ES6 const 深入理解全部内容,希望文章能够帮你解决JavaScript 关于ES6 const 深入理解所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。