资讯专栏INFORMATION COLUMN

const声明常量以及冻结一个对象

jeyhan / 2856人阅读

摘要:是新增加的关键字,作用是声明一个只读变量。暂时性死区块级作用域声明的值是基础数据类型,那么这个变量的值就不可以改变。

const是ES6新增加的关键字,作用是声明一个只读变量。这个变量指向的内容地址是不可以改动的。

const a = 1

a = 4  // TypeError: Assignment to constant variable.

let一样,它也有暂时性死区和块级作用域的特性。

// 暂时性死区
console.log(b)  // ReferenceError
const b = 2
// 块级作用域
if (true)
{
    const c = 2
}
console.log(c) // Uncaught ReferenceError: MAX is not defined

const声明的值是基础数据类型(Number,String,Boolean),那么这个变量的值就不可以改变。如果值是复合类型(主要是对象和数组),那么里面的属性或者每一项则可以改变。因为const只能保证这个指针是固定的,但是指向的数据结构则不可以控制。

const d = {}

d.name = "123"
console.log(d.name) // "123"

d = {} // TypeError: "d" is read-only
const f = []
f.push("123") // ["123"]
console.log(f) // ["123"]
f = [] // Uncaught TypeError: Assignment to constant variable.

如果想要将一个对象给锁死,应该使用Object.freeze

const e = Object.freeze({})
// 常规模式时,下面一行不起作用
// 严格模式时,该行会报错 Uncaught TypeError: Cannot add property name, object is not extensible
e.name = "123"

如果想要彻底锁死,应该将对象下面的所有属性锁死

function freezeObj(obj) {
    Object.freeze(obj)
  Object.keys(obj).forEach(function (v) {
    if (typeof obj[v] === "object") {
      freezeObj(obj[v])
    }
  })
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/107827.html

相关文章

  • 前端如何定义一个常量

    摘要:很多编程语言提供了关键词声明一个常量,在中也是提供了,但是在前端的与其他编程语言不同,其并不意味着声明的变量就是一个常量。所以,在前端中到底如何实现一个常量可以冻结对象,不能新增和删除属性,同时对象已有属性都是不可枚举不可配置不可写。 很多编程语言提供了const关键词声明一个常量,在ES6中也是提供了const,但是在前端的const与其他编程语言不同,其并不意味着声明的变量就是一个...

    widuu 评论0 收藏0
  • ES6学习笔记:const

    摘要:学习笔记的使用其他特性用来声明常量,声明时必须初始化声明的常量不能重新赋值对于基本类型,值不能改变对于引用类型,存储的是一个地址,地址不能变,但对象本身是可变的如果不想后续更改对象,使用文档用来冻结一个对象。该方法返回被冻结的对象。 let命令有的几个特性,const也有。ES6学习笔记:let的使用 其他特性: 用来声明常量,声明时必须初始化 const PI;//SyntaxErr...

    sydMobile 评论0 收藏0
  • ES6入门之let、cont

    摘要:凡是在声明之前就使用这些变量,就会报错。这在语法上,称为暂时性死区,简称。同样也不会声明提升,也存在暂时死区,只能在声明之后使用,且和一样不得重复声明,不能重新赋值。全局环境中,会返回顶层对象。 showImg(https://segmentfault.com/img/remote/1460000018739573?w=3240&h=2160); 一、前提 解决ES5中只有全局作用域和...

    wwq0327 评论0 收藏0
  • ES6 -- let和const

    摘要:和不同,没有变量提升,声明之前,该变量都是不可用的。声明创建一个只读的常量。这不意味着常量指向的值不可变,而是变量标识符的值只能赋值一次。声明同时必须赋值。 LET和const命令 var 变量声明提升原则 var语句声明的变量的作用域是当前执行位置的上下文 给一个非声明变量赋值会隐式创建一个全局变量(全局object的一个属性),注意这里是非声明赋值 声明和赋值是两回事,注意区分,...

    whidy 评论0 收藏0
  • 工作中常用es6+特性

    摘要:结合工作中使用情况,简单对进行一些复习总结,包括常用的语法,等,以及短时间内要上手需要重点学习的知识点不同工作环境可能有一些差别,主要参考链接是阮一峰的博客以及外文博客阮老师大部分文章是直接翻译的这个博客简介先说一下,是一个标准化组织,他们 结合工作中使用情况,简单对es6进行一些复习总结,包括常用的语法,api等,以及短时间内要上手需要重点学习的知识点(不同工作环境可能有一些差别),...

    xcold 评论0 收藏0

发表评论

0条评论

jeyhan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<