深入研究const(es6特性)
const 申明常量

var str = 'es6'
console.log(window.str) // es6 属于顶层对象window
const不属于顶层对象window
const str = 'es6' console.log(window.str) //undefined 不属于顶层对象window
var 存在变量提升 console.log(str)
var str = 'es6' 相当于===>> var str
console.log(str) //undefined
str = 'es6'
const 不存在变量提升
console.log(str) //报错
const str = 'es6'
if(true){
var str = 'es6'
}
console.log(str) // es6
const申明常量 有 块级作用域
if(true){
const str = 'es6'
}
console.log(str) // 报错
划重点,要考的!!
const 申明的常量是不可改变的! ( 除 数组 对象 之外 )
严格说 const声明的 常量地址 是不可变的, 地址里面的值 可以变的!!!

const aaObj = {
name: '大熊',
age: 18
}
aaObj.age = 19;
console.log(aaObj)
看到没, const申明的对象里面的 age变成了 19
const bbObj = ['大熊111','大熊222','大熊333']
bbObj[0] = '哈哈哈';
console.log(bbObj)
看到没, const申明的数组里面的第一项 变成了 哈哈哈
除了 数组 对象之外, 如下申明:
const aaa = 'xxxx'
const aaa = 'ssss'
console.log(aaa)

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
哥几个, 到这里 看明白了吧, 对于 const 申明的 数组 和 对象 ,里面的 值 是可以被改变的!!!!
那么有人就会问, 怎么才能做到不改变呢, 有个方法 Obiect.freeze()可以锁住 const申明的 对象 和 数组的 第一层!!!! 这里只能锁住 第一层, 如果里面嵌套了 数组对象, 那需要 遍历 然后 在 锁住freeze
1. Object.freeze 锁住 第一层 没问题
const arr = ['大熊111','大熊222','大熊333']
Object.freeze(arr);
arr[0] = 'xxxx';
console.log(arr); const ccObj = {
name: '大熊',
age: 18
}
Object.freeze(ccObj);
ccObj.age = 66;
console.log(ccObj);

2. Object.freeze 锁不住 第2层 以上
const ddObj = {
name: '大熊',
age: 18,
arr2: [1,2,4,5]
}
Object.freeze(ddObj);
ddObj.arr2[0] = '大熊';
console.log(ddObj);

3. 怎么把 const申明的 多层嵌套的 数组 对象 锁住 (遍历!)
const jjObj = {
name: '大熊',
age: 18,
arr2: [1,2,4,5]
}
function myFreeze(obj){
Object.freeze(obj);
// 属性对应的值 是对象 那就 递归 再次调用 该函数
Object.keys(obj).forEach(key=>{
if(typeof obj[key] === 'object') return myFreeze(obj[key]);
})
}
myFreeze(jjObj);
jjObj.arr2[0] = '大熊';
console.log(jjObj);

有问题直接 评论, 本文有些素材采取 于 慕课网 , 如有版侵权问题,请联系在下,谢谢!
深入研究const(es6特性)的更多相关文章
- 最常用的ES6特性(转)
最常用的ES6特性 let, const, class, extends, super, arrow functions, template string, destructuring, defaul ...
- 最常用的ES6特性
遇到了要写出es6新特性的题目,所以查阅了资料来总结一下,点击查看原文. 进入正题,最常用的ES6特性有:let, const, class, extends, super, arrow functi ...
- ES6特性
一.ES6特性: let, const, class, extends, super, arrow functions, template string, destructuring, default ...
- 第四节:教你如何快速让浏览器兼容ES6特性
写在正文前,本来这一节的内容应该放在第二节更合适,因为当时就有同学问ES6的兼容性如何,如何在浏览器兼容ES6的特性,这节前端君会介绍一个抱砖引玉的操作案例. 为什么ES6会有兼容性问题? 由于广大用 ...
- 解决浏览器兼容ES6特性
为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使用了ES6的新特性,浏览器若没有更新版本,或者新版本中没有对ES6的特性 ...
- 现在就可以使用的5个 ES6 特性
小编推荐:掘金是一个高质量的技术社区,从 ECMAScript 6 到 Vue.js,性能优化到开源类库,让你不错过前端开发的每一个技术干货.各大应用市场搜索「掘金」即可下载APP,技术干货尽在掌握. ...
- 解决让浏览器兼容ES6特性
为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使用了ES6的新特性,浏览器若没有更新版本,或者新版本中没有对ES6的特性 ...
- 9个常用ES6特性归纳(一般用这些就够了)
ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应 ...
- ES6特性的两点分析
块级作用域声明let.constES6中const 和let的功能,转换为ES5之后,我们会发现实质就是在块级作用改变一下变量名,使之与外层不同.ES6转换前: let a1 = 1; let a2 ...
随机推荐
- linux curl 的用法指南
curl用法指南
- 编译OneAPI(支持Nvidia显卡)
开始使用DPC++ 官方安装教程 预备条件 请确保当前开发环境满足如下条件: git cmake版本需要满足3.14及以上. python版本3.6以上的python. nijia版本1.8及以上(使 ...
- SpringBoot学习入门之Hello项目的构建、单元测试和热部署等(配图文,配置信息详解,附案例源码)
前言: 本文章主要是个人在学习SpringBoot框架时做的一些准备,参考老师讲解进行完善对SpringBoot构建简单项目的学习汇集成本篇文章,作为自己对SpringBoot框架的总结与笔记. 你将 ...
- egg启动时,报错:Ignoring invalid timezone passed to Connection的解决方案
报错信息 Ignoring invalid timezone passed to Connection: +8:00. This is currently a warning, but in futu ...
- vue2.x版本中computed和watch的使用入门详解-computed篇
前言 在基于vue框架的前端项目开发过程中,只要涉及到稍微复杂一点的业务,我们都会用到computed计算属性这个钩子函数,可以用于一些状态的结合处理和缓存的操作. 基础使用 在computed中,声 ...
- Anaconda 01_安装问题
一. 创建环境 1.打开cmd 使用如下语句创建环境 conda create -n 环境名 2. 查看当前conda所有环境 conda info --envs 3.激活环境(其中一句) Co ...
- python练习册 每天一个小程序 第0004题
1 #-*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述:任一个英文的纯文本文件,统计其中的单词出现的个数. 5 参考学习链接: 6 re ht ...
- Presidential-01
环境搭建 官网地址:https://www.vulnhub.com/entry/presidential-1,500/ 靶机下载地址: https://download.vulnhub.com/pre ...
- uoj310. 【UNR #2】黎明前的巧克力
题目描述: uoj 题解: WTF. 看题解看了一个小时才看明白. 首先有状态$f[i][j]$表示前$i$个东西两人取,最后两人异或和为$j$的有多少方案. 转移为$f[i][j]=f[i-1][j ...
- Qt自定义控件之可伸缩组合框(GroupBox)控件
摘要 本文基于QGroupBox扩展了一种可以伸缩的组合框,正常状态下,组合框处于收缩状态,内部的控件是隐藏的:需要的时候,可以将组合框进行伸展,并将内部控件显示出来. 正文 实现的代码比较简单,主要 ...