Es6系列--const

const是用来定义常量,一旦声明,其值就不能改变

const声明的常量不得改变值。这意味着,const一旦声明常量,就必须立即初始化,不能留到最后赋值。

 const的作用域与let相同:只在声明所在的块级作用域内有效

const变量也不会提升,同样也存在暂时性死区,只能在声明后使用。

与let一样,const也不可以重复声明变量。

对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址。const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量必须非常小心

这句话的意思就是

这样写不会有问题但你要这样写就会出错

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

下面是另一个例子

上面的代码中,常量a是一个数组,这个数组本身是可写的,但如果将另一个数组赋值给a,就会报错

原文地址:https://www.cnblogs.com/qjuly/p/8965557.html

时间: 2024-09-30 12:57:57

Es6系列--const的相关文章

[ES6系列-04]再也不乱“哇”了:用 let 与 const 替代 var

[原创]码路工人 Coder-Power 大家好,这里是码路工人有力量,我是码路工人,你们是力量. github-pages 博客园cnblogs 今天的内容是,关于 JavaScript 中定义变量的变化(其实不确切,函数,常量表示被冷落). 首先,回顾下 var 定义存在的问题 1. 哇..var 好乱.. 1.1 可以重复定义 /* eg.0 * multi-definition of var-variable */ //----------------------------------

[js高手之路] es6系列教程 - 迭代器,生成器,for...of,entries,values,keys等详解

接着上文[js高手之路] es6系列教程 - 迭代器与生成器详解继续. 在es6中引入了一个新的循环结构for ....of, 主要是用来循环可迭代的对象,那么什么是可迭代的对象呢? 可迭代的对象一般都有Symbol.iterator属性,你可以在控制台中用console.dir打印数组,Map,Set,在他们的原型对象(prototype)上面就能找到.这个属性与迭代器密切相关,通过该函数可以返回一个迭代器,下文,我会举一个例子.一般来说所有的集合对象(数组,Set,Map 以及字符串)都是可

ES6 系列之异步处理实战

前言 我们以查找指定目录下的最大文件为例,感受从 回调函数 -> Promise -> Generator -> Async 异步处理方式的改变. API 介绍 为了实现这个功能,我们需要用到几个 Nodejs 的 API,所以我们来简单介绍一下. fs.readdir readdir 方法用于读取目录,返回一个包含文件和目录的数组. fs.stat stat 方法的参数是一个文件或目录,它产生一个对象,该对象包含了该文件或目录的具体信息.此外,该对象还有一个 isFile() 方法可以

[js高手之路] es6系列教程 - var, let, const详解

function show( flag ){             console.log( a );             if( flag ){                 var a = 'ghostwu';                 return a;             } else {                 console.log( a );                 return null;             }         } 我们从e

ES6系列,1.新增let和const命令

由于ES5只有全局作用域和函数作用域,因此ES6增加块级作用域. let用于定义变量,块级作用域,for循环建议使用let: let会引起变量提升,必须先声明,在调用: let声明的变量,不允许重复声明: let实际是创建了块级作用域,可以变成do表达式 例:let x = do { let t = f(); t * t + 1; }; 上面代码中,变量x会得到整个块级作用域的返回值. const变量定义常量,一旦定义,不可以修改: const一旦声明变量,就必须立即初始化,不能留到以后赋值:

ES6系列一 let const

一丶let 1.使用let声明一个变量,会生成一个独立的作用域,比var的作用域更为严谨,比如for循环 var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 10 var a = []; for (let i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 6

[ES6 系列] 你真的了解ES6吗(一)

前言 无论是我们日常开发还是面试跳坑, ES6 已经变得越来越重要,那么你是否对它足够熟悉呢 ES6 将会是专栏接下来的一个系列,从最基础的概念或者有趣的问题开始逐渐深入,探究 ES6 常用的特性以及实际开发中遇到的问题.有些问题可能会比较奇葩,工作中根本不会写出这样的代码,但正是这些问题可以看出你的了解程度 本文的 答案 不一定是最优解释,如果你有更好的想法或更优雅的写法,欢迎留言讨论 如果文章中有出现纰漏.错误之处,还请看到的小伙伴多多指教,先行谢过 以下↓ 正文 下面代码会打印什么 fun

[js高手之路] es6系列教程 - new.target属性与es5改造es6的类语法

es5的构造函数前面如果不用new调用,this指向window,对象的属性就得不到值了,所以以前我们都要在构造函数中通过判断this是否使用了new关键字来确保普通的函数调用方式都能让对象复制到属性 1 function Person( uName ){ 2 if ( this instanceof Person ) { 3 this.userName = uName; 4 }else { 5 return new Person( uName ); 6 } 7 } 8 Person.proto

ES6 三 const

const const 声明一个只读的常量,一旦声明,不会被改变,所以const一旦声明,立刻初始化赋值 const的作用域同let一样,在块级作用域内 const 同let一样,不能变量提升,不能在块级作用域内声明之前调用,不可重复声明 对于复合类型的数据,是指向数据所在的地址,const只保证指向所在地址不变,但是不能保证数据不可变 如果想让对象冻结 const foo = Object.freeze({}); // 常规模式时,下面一行不起作用; // 严格模式时,该行会报错 foo.pr