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特性)的更多相关文章

  1. 最常用的ES6特性(转)

    最常用的ES6特性 let, const, class, extends, super, arrow functions, template string, destructuring, defaul ...

  2. 最常用的ES6特性

    遇到了要写出es6新特性的题目,所以查阅了资料来总结一下,点击查看原文. 进入正题,最常用的ES6特性有:let, const, class, extends, super, arrow functi ...

  3. ES6特性

    一.ES6特性: let, const, class, extends, super, arrow functions, template string, destructuring, default ...

  4. 第四节:教你如何快速让浏览器兼容ES6特性

    写在正文前,本来这一节的内容应该放在第二节更合适,因为当时就有同学问ES6的兼容性如何,如何在浏览器兼容ES6的特性,这节前端君会介绍一个抱砖引玉的操作案例. 为什么ES6会有兼容性问题? 由于广大用 ...

  5. 解决浏览器兼容ES6特性

    为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使用了ES6的新特性,浏览器若没有更新版本,或者新版本中没有对ES6的特性 ...

  6. 现在就可以使用的5个 ES6 特性

    小编推荐:掘金是一个高质量的技术社区,从 ECMAScript 6 到 Vue.js,性能优化到开源类库,让你不错过前端开发的每一个技术干货.各大应用市场搜索「掘金」即可下载APP,技术干货尽在掌握. ...

  7. 解决让浏览器兼容ES6特性

    为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使用了ES6的新特性,浏览器若没有更新版本,或者新版本中没有对ES6的特性 ...

  8. 9个常用ES6特性归纳(一般用这些就够了)

    ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应 ...

  9. ES6特性的两点分析

    块级作用域声明let.constES6中const 和let的功能,转换为ES5之后,我们会发现实质就是在块级作用改变一下变量名,使之与外层不同.ES6转换前: let a1 = 1; let a2 ...

随机推荐

  1. centos7运行system-config-kickstart时报错

    centos7运行system-config-kickstart时在Package Selection模块中出现如下错误: Package Selection Packageselection is ...

  2. laravel json封装

    目录文件下新建一个BaseConttoller控制器 <?php namespace App\Http\Controllers\Task\Task13; use App\Http\Control ...

  3. PhpStorm 编辑器上更改文件后自动上传服务器

    在编辑器内设置自动上传后很方便,,,就不用编辑完了之后还要去服务器里面上传,很麻烦!!!设置了自动上传Ctrl +S  就可以上传了 方便至极~~~~~~~希望可以帮到大家 1.菜单栏找到[工具/To ...

  4. XSS攻击防范

    前端安全系列之XSS攻击防范 1.使用textContent 2.使用HTML转义 把JS中的标签转成字符 3.对于链接跳转 禁止含有'javascript:'开头的字符 4.标签属性中含有恶意执行代 ...

  5. Android 12(S) 图形显示系统 - BufferQueue/BLASTBufferQueue之初识(六)

    题外话 你有没有听见,心里有一声咆哮,那一声咆哮,它好像在说:我就是要从后面追上去! 写文章真的好痛苦,特别是自己对这方面的知识也一知半解就更加痛苦了.这已经是这个系列的第六篇了,很多次都想放弃了,但 ...

  6. hadoop学习笔记 一

    Hadoop 2.x * common * HDFS 存储数据 NameNode 主从结构 * 存储文件系统的元数据,命名空间namespace DataNode * 存储数据 SecondaryNa ...

  7. XSS 32个触发事件

    标签: 1.onmouseenter:当鼠标进入选区执行代码 <div style="background-color:red" onmouseenter="ale ...

  8. python豆瓣250爬取

    import requests from bs4 import BeautifulSoup from lxml import etree # qianxiao996精心制作 #博客地址:https:/ ...

  9. luogu4883 mzf的考验

    题目描述: luogu 题解: 当然splay. 区间翻转是基本操作. 区间异或?按套路记录区间内每一位$1$的个数,异或的时候按位取反即可. 区间查询同理. 因为要按位维护,所以复杂度多了个log. ...

  10. 浅谈systemd原理和应用

    多不说,直接上代码(可谓配置): [Unit] Description=demo app After=network-is-online.target [Service] Type=Simple Ex ...