es6中const定义的属性是否可以改变_为什么有人说const并非一定为常量

时间: 2018-07-25阅读: 5955标签: es6

由一个有个问题引入:const定义的对象属性是否可以改变?如果你面试回答不可以,那么面试官会告诉你回答错了,这难道const定义的并非一定为常量?下面先看下const的定义:


const是用来定义常量的,而且定义的时候必须初始化,且定义后不可以修改。

这对于基本类型的数据而言:如果定义的时候不初始化值的话就会报错,错误内容就是没有初始化。并且const定义的基本数据类型的变量确实不能修改。例如:

1、不初始化的情况

const PI
// Uncaught SyntaxError: Missing initializer in const declaration

2、修改变量的情况

const PI=3.14159
PI=3
Uncaught TypeError: Assignment to constant variable.


上面说的const定义的属性可变,是针对对象或者数组的。例如:

1、const定义对象:

const Obj = {};
Obj.name = "fly63";
console.log(Obj.name); // 打印fly63

2、const定义数组

Arr=[3,4]
Arr[0]=1
console.log(Arr) //输出[1,4]

//不应许直接赋值,回报错:Uncaught TypeError: Assignment to constant variable.
Arr=[1,4]


为什么会这样呢?这是由于对象或者数组属于引用数据类。

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。
对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。  


const定义引用数据类,不能修改指针指向新的对象 ,但可以修改它指向的数据。


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/952

es6之迭代器

迭代器是被设计专用于迭代的对象,带有特定接口。所有的迭代器对象都拥有 next() 方法,会返回一个结果对象。该结果对象有两个属性:对应下一个值的 value ,以及一个布尔类型的 done

js解构赋值,关于es6中的解构赋值的用途总结

ES6中添加了一个新属性解构,允许你使用类似数组或对象字面量的语法将数组和对象的属性赋给各种变量。用途:交换变量的值、从函数返回多个值、函数参数的定义、提取JSON数据、函数参数的默认值...

九个超级实用的 ES6 特性

展开操作符顾名思义,用于对象或数组之前的展开操作符(…),将一个结构展开为列表。剩余参数将剩余的参数收入数列。JavaScript 的特性是参数数目很灵活

ES6 动态计算属性名

在ES5之前,如果属性名是个变量或者需要动态计算,则只能通过 对象.[变量名] 的方式去访问,而且这种动态计算属性名的方式 在字面量中 是无法使用的

ES6的7个实用技巧

ES6的7个实用技巧包括:1交换元素,2 调试,3 单条语句,4 数组拼接,5 制作副本,6 命名参数,7 Async/Await结合数组解构

ES6深度解析:Generators

这是一只会说话的猫的一些代码,可能是当今互联网上最重要的一种应用。它看起来有点像一个函数,对吗?这被称为生成器-函数,它与函数有很多共同之处。但你马上就能看到两个不同之处。

es6 class

构造函数的prototype属性,在 ES6 的“类”上面继续存在。事实上,类的所有方法都定义在类的prototype属性上面。

在使用es6语法class的时候,babel到底做了什么?

自从有了webpack之后,我们这些jscoder似乎得到了前所未有的解放,箭头函数,对象解构,let,const关键字,以及class、extends等等,webpack会帮我们把这些es6代码转换成浏览器能够识别的es5代码,那么有多少人真正的看过,babel转换之后的代码呢?

ES6常用的新特性总结

ES6是新版本JavaScript语言的标准,他给我们带来了更”甜”的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数(=>)、class等等。用一句话来说就是:

Vue开发中可以使用的 ES6新特征

ECMAScript 6.0(以下简称 ES6)是 Javascript 语言的下一代标准,正式发布与2015年6月。它的目标,是使得Javascript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!