当前位置: 首页 > news >正文

ES6 之关键字 const

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

今天我们来聊下 ES6 的另一个 关键字 const

一、const 关键字

const 是 constant(常量)的缩写,const 和 let 一样也是来声明变量的,但 const 是专门用来声明一个常量的,那么既然是常量,它的值是不能改变的。不像以前用 var 声明的变量 随便改。
可见,碰到const 该改收收你们任性的代码了!

二、谈谈常量

1.不可修改
const Name='张';
Name = 'zhang' // 错误,不可修改常量 Name
2.只在块级作用域起作用,这点和 let 一样
if (x) {
   const Name='张' 
}
alert(Name) // 错误,在代码块{}外,Name 不起作用 
3.不存在变量提升,必须先声明后使用,也和 let 一样
if (x) {
   alert(Name) // 错误,使用前未声明
   const Name='张' 
   
}

4.不可重复声明同一个变量也和 let 一样
var Name='张' ;
const Name='张' // 错误 变量已经声明 ,不可重复声明
5.声明后必须要赋值
const NAME; // 错误 声明后没赋值

三、const 声明 对象

先看代码
const Person = {
    'name':'张'
} 
Person.name='王';
Person.age=20;

console.log(Person) // 输出 {'name':'王','age':20 }
不是说好的常量不能修改么。搞事情...
淡定 , 听我说!
这里现讲一个概念:传址赋值
在赋值过程中,我们分为传值赋值和 传址赋值 ,这里就讲讲我们用到的 传址赋值
传址:在赋值过程中,变量存储的实际上是 数据的地址,而不是原始数据 或者对数据的拷贝。
不太明白,没事,先看代码
var person1={'name':'张'}
var person2=person1
person2.name='王'
console.log(person1) // 输出 {name:'王'}
console.log(person2) // 输出 {name:'王'}
为什么person2 的name 改了以后 person1 的也变了,这就是传址赋值
举个例子:比如 你预约了一个染发师小王,小王沿着你给的地址来了你家 给你把头发染成 奶奶灰色。
过了几天,你觉得他染得不行而且发色 不好看,又预约了小李,小李沿着地址同样来到你家,给你把头发改善了下,并染成 亚麻色。
那么不管谁来你家,按你地址来的见到你 发色 一定是 亚麻色,因为,最后一次 的染发 是亚麻色。
再看代码
// 小王给你染得奶奶灰
var wang={hair:'奶奶灰'}

// 过了几天,你让小李来,并告诉了他地址
var li=wang

// 小李给你染得亚麻色
var li={hair:'亚麻色'}

// 那么不管谁来你家,你的发色一定是亚麻色
console.log(wang) // 输出 {'hair':'亚麻色'}
console.log(li) //  输出 {'hair':'亚麻色'}
翻到开始的那个代码,结构都一样,应该明白了吧。
回到我们的关键字 const ,用 const 来声明 一个对象类型的常量,就是传址赋值。而不可修改的是 对象在内存中的地址,而不是对象本身(不变的你家的地址而不是你的发色)
所以上面那段代码console 的时候能正常输出了
var person1={'name':'张'}
var person2=person1
person2.name='王'
console.log(person1) // 正常输出 {name:'王'}
console.log(person2) // 正常输出 {name:'王'}
但是,如果这样写就要报错了
var person1={'name':'张'}
person1={} // 错误,给常量person1 重新赋值(即改变你家地址)

小结:

const是用于声明一个常量,并必须赋值,声明后不可修改,和 let 一样,只在块级作用域 起作用,不可重复声明同一个变量,不会有变量提升的情况,声明引用类型的常量时,要注意传址赋值。

ok!

转载于:https://my.oschina.net/u/3662721/blog/1619740

相关文章:

  • [转] 学会fetch的用法
  • Excel导入功能测试用例整理
  • DAY9-python并发之多进程
  • 常用特殊符号的HTML代码(HTML字符实体)
  • Java开发Tips
  • CUDA学习(十九)
  • export和import的用法总结
  • Picasso源码阅读笔记九
  • 《Python编程快速上手》第8.9.2实践练习
  • Intel发布P4500、P4600 NVMe SSD:规格释疑
  • Gradle:Gradle入门
  • 超简便安装mysql
  • 个人开发—进度记录(十)
  • 【技巧】从键盘读入一串字符并输出
  • [转] Webpack 打包优化之体积篇
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【译】理解JavaScript:new 关键字
  • 〔开发系列〕一次关于小程序开发的深度总结
  • CentOS7简单部署NFS
  • CSS盒模型深入
  • ES学习笔记(12)--Symbol
  • Fastjson的基本使用方法大全
  • HTTP中的ETag在移动客户端的应用
  • Java,console输出实时的转向GUI textbox
  • Java小白进阶笔记(3)-初级面向对象
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Magento 1.x 中文订单打印乱码
  • Meteor的表单提交:Form
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • React的组件模式
  • scrapy学习之路4(itemloder的使用)
  • 分布式事物理论与实践
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 我从编程教室毕业
  • 因为阿里,他们成了“杭漂”
  • 原生Ajax
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • ###项目技术发展史
  • (02)vite环境变量配置
  • (1)虚拟机的安装与使用,linux系统安装
  • (C语言)fread与fwrite详解
  • (js)循环条件满足时终止循环
  • (pojstep1.3.1)1017(构造法模拟)
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)jQuery 基础
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复