JavaScript 关于ES6 const 深入理解

2019-05-17 admin

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

关于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]);
        }
    })
}

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

填坑完毕.

[转载]原文链接:https://segmentfault.com/a/1190000019206514

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。

转载请注明:文章转载自 JavaScript中文网 [https://www.javascriptcn.com]

本文地址:https://www.javascriptcn.com/read-65132.html

文章标题:JavaScript 关于ES6 const 深入理解

相关文章
JavaScript实现PC手机端和嵌入式滑动拼图验证码三种效果
PC和手机端网站滑动拼图验证码效果源码,同时包涵了弹出式Demo,使用ajax形式提交二次验证码所需的验证结果值,嵌入式Demo,使用表单形式提交二次验证所需的验证结果值,移动端手动实现弹出式Demo三种效果 首先要确认前端使用页面,比如...
2017-03-17
JavaScript常用特效chm下载
下载地址:JavaScript常用特效chm下载 对了,如果打开空白,在手册上右键属性解除锁定即可。 ...
2015-11-12
JavaScript教程:JS中的原型
Keith Peters 几年前发表的一篇博文,关于学习没有“new”的世界,其中解释了使用原型继承代替构造函数。两者都是纯粹的原型编码。 标准方法(The Standard Way) 一直以来,我们学习的在 JavaScript 里创建对...
2015-11-12
javascript是什么意思
avaScript是Netscape开发的一个对象脚本语言,它使用在世界各地数以百万计的网页和服务器应用程序上。 网景的JavaScript是ecma - 262版的标准脚本语言,和公布的标准只有轻微的差异。 与广为流行的错误理解相反,Ja...
2015-11-12
21天学通javascript
简介: 本书是Javascript入门教程。Javascript是Web开发中应用最早、发展最成熟、用户最多的脚本语言。其语法简洁,代码可读性在众多脚本语言中最好,它在使用时不用考虑数据类型,是真正意义上的动态语言。本书总分为四篇,共21章...
2015-11-16
canvas图片绘制跨域问题解决方案Tainted canvases may not be exported
图片跨域问题的一般解决方法 当使用canvas绘制网络图片的时候,经常会出现“Tainted canvases may not be exported”报错,上网搜一下解决方案,应该给的都是给img添加crossOrigin属性,尝试了一下...
2018-04-19
JavaScript的组成
一个完整的JavaScript由3个部分组成:核心(ECMAScript) 文档对象模型(DOM) 浏览器对象模型(BOM) ECMAScript 描述了该语言的语法和基本对象 ; DOM 描述了处理网页内容的方法和接口 ; BOM 描...
2015-11-12
javaScript+turn.js实现图书翻页效果实例代码
为了实现图书翻页的效果我们在网上可以看到很多教程 在这里推荐turn.js 网上的turn.js 有api 不过是英文的  很多人看起来不方便 .关于代码也是奇形怪状在这里我将详细讲解如何使用turn.js实现翻页效果 ,本篇文章只是讲解 ...
2017-03-16
JavaScript 事件流、事件处理程序及事件对象总结
JS与HTML之间的交互通过事件实现。事件就是文档或浏览器窗口中发生的一些特定的交互瞬间。可以使用监听器(或处理程序)来预定事件,以便事件发生时执行相应的代码。这种在传统软件工程中被称为观察员模式,支持页面的行为与页面的外观之间的松散耦合。...
2017-04-05
JavaScript变量的声明
声明变量 变量在脚本中的首次亮相是在其声明中。 在变量首次出现时将会在内存中设置它,因此您稍后可在脚本中引用它。 应在使用变量之前先声明变量。 可以使用 var 关键字实现此目的。 <span id=“mt9” class=“sent...
2015-11-12
回到顶部