ES6 - 基础学习(3): const关键字的本质

const 是如何做到变量在声明初始化之后不允许改变的?

其实 const 保证的不是变量的值不允许改变,而是保证该变量指向的内存地址所保存的数据不允许改变。

由于简单数据类型和复合数据类型保存值的方式不同:

对于简单类型的数据(数值 number、字符串 string 、布尔值 boolean),值就保存在变量指向的内存地址内,因此 const 声明的简单类型变量就等同于常量。

而对于复杂类型(对象 object,数组 array,函数 function),变量指向的内存地址,实际上保存的只是一个指向实际数据的指针。const 只能保证这个指针是固定的(即总是指向一个固定的内存地址),但这个指针指向的数据结构变不变就无法控制了,所以在使用 const 声明复杂类型数据为常量时要慎重,必须非常小心。

原文地址:https://www.cnblogs.com/donghuang/p/12642067.html

时间: 2024-10-07 02:18:44

ES6 - 基础学习(3): const关键字的本质的相关文章

es6基础学习二 const

es5是没用常量声明这个选项,es6将其添加其中. 1.基本用法 const 声明一个只读常量.一旦申明,常量的值就不能改变. const PI = 3.1415; PI = 3; //SyntaxError const 声明的变量,一旦声明必须初始化(即赋值),否则报错. const foo; // syntaxError 除此之外,const的声明常量类似let声明的变量: a> 不存在变量提升 b> 只在声明所在的块级作用域内有效 c> 不能重复用var.let.const声明 e

java基础学习总结——static关键字

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——static关键字 一.static关键字 原来一个类里面的成员变量,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态成员变量.对于static成员变量来说,这个成员变量只有一份,而且这一份是这个类所有的对象共享. 1.1.静态成员变量与非静态成员变量的区别 以下面的例子为例说明 1 package cn.galc.test; 2 3 public class Cat { 4 5

JAVA基础学习之final关键字、遍历集合、日期类对象的使用、Math类对象的使用、Runtime类对象的使用、时间对象Date(两个日期相减)

1.final关键字和.net中的const关键字一样,是常量的修饰符,但是final还可以修饰类.方法.写法规范:常量所有字母都大写,多个单词中间用 "_"连接. 2.遍历集合ArrayList<Integer> list = new ArrayList<Integer>();list.add(1);list.add(3);list.add(5);list.add(7);// 遍历List方法1,使用普通for循环:for (int i = 0; i <

ES6 基础学习

ECMAScript 6 标准入门 一.let和const let命令 let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效:是块级作用域,且let不允许在相同作用域内,重复声明同一个变量. { let a = 12; } console.log(a); //Uncaught ReferenceError: a is not defined { let a = 12; let a = 22; } console.log(a); //Uncaught

ES6 - 基础学习(9): Class 类

概述 在ES6中,class (类)作为对象的模板被引入,可以通过 class 关键字定义类. class 的本质是 function.它可以看作一个语法糖,让对象原型的写法更加清晰.更像面向对象编程的语法. 在ES5中经常使用方法或者对象去模拟类的使用,虽然可以实现功能,但代码复杂且不优雅,ES6为此提供了类的使用.需要注意的是在写类的时候和ES5中的对象以及构造函数要区分开来,不要混淆了. 原文地址:https://www.cnblogs.com/donghuang/p/12380976.h

es6 基础学习一 let

1.基本用法 let声明的变量,只在let命令所在的代码快有效: { let a = 1; var b = 1; } b //1 a //referenceError: a is not defind ps: 说明es5没有块级作用域,导致if,for等循环语句声明的变量或变量赋值,外泄块级以外的环境.如: var i = 100; for(var i = 0; i < 10; i++){} i;//9 而es5通常的做法是,利用匿名函数来解决: var i = 100; (function()

基础学习--标识符、关键字、数据类型与运算符

Java%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84%E6%97%A5%E5%B8%B8%20%E2%80%94%E2%80%94%20%E5%A4%9A%E8%BF%9B%E7%A8%8B%E5%BC%80%E5%8F%91 ?????FuZtCANh???????μ??? http://auto.315che.com/zhonghuav5/qa23385020.htm?mepv ?Q????mNb8MUd8????????? ?R????pocjfDLU?????

ES6 - 基础学习(12): Set、WeakSet、Map、WeakMap补充

Map与其他数据结构的互相转换 (1)Map 转为数组.数组 转为 Map (2)Map 转为对象.对象转为 Map (3)Map 转为 JSON.JSON 转为 Map 原文地址:https://www.cnblogs.com/donghuang/p/12405005.html

ES6的新特性 — 新增关键字let、const

ECMAScript 是什么? 首先,我们都知道JavaScript由三部分组成:ECMAScript,DOM,BOM: 其中的ECMAScript是Javascript的语法规范. ECMAScript定义了很多东西,如: 语法-----解析规则,关键字,语句,声明,操作等 类型-----布尔型,数字,字符串,对象等 原型和继承 内置对象,函数的标准库----------JSON, Math, 数组方法,对象方法等 浏览器兼容: 目前Google和Firefox浏览器对ES6新特性的兼容最友好