let与const的区别

let与const都是只在声明所在的块级作用域内有效。

let声明的变量可以改变,值和类型都可以改变,没有限制。

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

const a ;//报错,一旦声明变量,应该立即赋值!!

const b = 2;b = 3//报错,因为定义常量之后不能成重新赋值!!

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

const names = [];names = [1,2,3] //出错,因为变量names指向的地址不能发生改变,应始终指向[]所在的地址!!![1,2,3]与[]不是同一个地址
//不会报错,因为names指向的地址不变,改变的只是内部数据const names = [];
names[0] = 1
names[1] = 2
names[2] = 3

如果想让定义的对象或数组的内部数据也不能够修改和改变,可以使用object.freeze(names)进行冻结,这样为对象添加新属性就不起作用。

除了将对象本身冻结,对象的属性也应该冻结。下面是一个将对象彻底冻结的函数

var constantize = (obj) => {
  Object.freeze(obj);
  Object.keys(obj).forEach( (key) => {
    if ( typeof obj[key] === ‘object‘ ) {
      constantize( obj[key] );
    }
  });
};

参考:let和const命令

时间: 2024-08-07 15:01:15

let与const的区别的相关文章

const char* &p 和 char* const &p 区别

const char* &p 和 char* const &p 两种引用: 两者都是对一个对象的引用. 但是前者的"这个对象"是 const char*,一个指向 const char 的指针,注意!虽 然这个指针指向的char不可以改变,但这个指针本身的值是可以改变的,也就是说, 他可以被改变而指向另一个 const char 对象. 后者的"这个对象"则是char*, 一个指向char的指针.这个指针指向的东西是可以 改变的,但是这个指针本身是不

readonly和const的区别

readonly与const的区别1.const常量在声明的同时必须赋值,readonly在声明时可以不赋值2.readonly只能在声明时或在构造方法中赋值(readonly的成员变量可以根据调用不同的构造方法赋不同的值)3.const前面不能添加static(因为Const本来就是一个静态常量),readonly前面可以添加static4.const在编译的时候赋值,readonly在运行的时候赋值5.const能在方法内声明,readonly不能在方法内声明 class ReadOnlyA

宏定义 #define 和常量 const 的区别

宏定义 #define 和常量 const 的区别 类型和安全检查不同 宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误: const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查 编译器处理不同 宏定义是一个"编译时"概念,在预处理阶段展开,不能对宏定义进行调试,生命周期结束与编译时期: const常量是一个"运行时"概念,在程序运行使用,类似于一个只读行数据 存储方式不同 宏定义是直接替换,不会分配内存,存储与

var let const 的区别

Var let const 的区别 1.Var 定义的变量存在变量提升,而了let和const不存在变量提升.即在定义的变量代码上使用该变量,var的会输出undefined,而let的会报错. 2.var不存在暂时性死区,而let存在,只要块级作用域内存在let,它所声明的变量就绑定了这个区域,不在受外部的影响 例如:var tem=123: if(true){ tem='abc';   //报错 ReferenceError,因为在if里声明了let,形成了自己的作用域,外部的访问不到,所以

var const let 区别

var  const   let  区别 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1. const 定义的变量是不可修改的,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 3 console.log('函数外const定义b:' + b);//有输出值 4 // b = 5; 5 // console.log('函数外修改const定义b:

var、let、const的区别,已经作用范围。

在es5中一般经常使用的变量有两个级别,一个是用var声明的全局级别的变量,另外一个是函数级别是用var生命在函数内的.本文中将详细讲解我对es6中的const和let的区别. let的使用以及作用范围 let是块级变量,只有在自己声明的内部才会有作用. 'use strict'; { var a = 12; let b = 15; { console.log(a, b)//12 15没有问题的. } } console.log(a,b) //12 defined a是全局变量在哪里输出都没有问

C#基本知识点-Readonly和Const的区别

目录 什么是静态常量(Const)和动态常量(Readonly) 静态常量(Const)和动态常量(Readonly)之间的区别 动态常量(Readonly)被赋值后不可以改变 总结 什么是静态常量(Const)和动态常量(Readonly) 先解释下什么是静态常量(Const)以及什么是动态常量(Readonly). 静态常量(Const)是指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值. 动态常量(Readonly)的值则是在运行的那一刻才获得的,编译器编译期间将其标示

define和const的区别

常量是一个简单值的标识符(名字).如同其名称所暗示的,在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量).常量默认为大小写敏感.通常常量标识符总是大写的. 可以用 define() 函数来定义常量.在 PHP 5.3.0 以后,可以使用 const 关键字在类定义的外部定义常量,先前版本const 关键字只能在类(class)中使用.一个常量一旦被定义,就不能再改变或者取消定义. 常量只能包含标量数据(boolean,integer,float 和 string). 可以定义 r

C++中加const与不加const的区别

“常量”与“只读变量”的区别. 常量肯定是只读的,例如5, "abc",等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它. “只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改.C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier). 在ANSI C 语言中用enum类型和#define宏,这两个都可以用来定义常量. 类型声明中const用来修饰一个常量,有如下两种写法. 1).const在

let const var 区别

var 具有变量提升,但是JS没有块级作用于所以例如for循环当中var声明的变量,再for循环外部可以直接访问到 1 for(var i = 0 ; i < 10 ; i++){ 2 3 } 4 console.log(i); //10 1 for(var i = 0 ; i < 10 ; i++){ 2 setTimeout(function(){ 3 console.log(i); //打印十次10 4 },1000) 5 } let 和var非常相似,区别在于,声明的变量,只在当前作用