项目开发中一些常用的es6知识,主要是为以后分享小程序开发、node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫。

项目开发常用es6介绍

  • 1、块级作用域 let const 

  • 2、箭头函数及this指向

  • 3、promise、

  • 4、async await语法
  • 4、模块化 module export和import

  • 5、解构赋值、字符串模板

  • ……

let const

es6新增了let和const命令,用法类似于var。对于三者的异同见下表格:

  声明 重复声明 变量提升
var 变量 可以 存在
let 变量 不可以 不存在
const 常量 不可以 不存在

对于var不过多解释,let用于声明变量const用于声明常量。常量即是不可改变的量,一旦声明,常量的值就不能改变。所以使用const,就必须立即初始化,不能留到以后赋值(当然如果只声明不赋值的话浏览器也会报错)。

let和const在相同的作用域内是不能重复声明的,如下示例:

// 报错,重复声明
function func() {
let a = 10;
let a = 1;
} function func(arg) {
let arg; // 报错,函数传参实际上也是定义了一个变量arg
{
let arg; // 不报错,因为函数参数和let声明的变量不在同一个作用域(代码块)内
let aaa;
}
console.log(aaa) // aaa is not defined
}
//第二个示例说明了let声明的变量只在它所在的代码块有效,const同样如此

var命令会发生”变量提升“现象,即变量可以在声明之前使用。而let和const所声明的变量常量一定要在声明后使用,否则报错。

// var 的情况
console.log(foo); // 输出undefined
var foo = 2;
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
//const同样如此

块级作用域

块级作用域即是将代码写在{}里,是一个语句且没有返回值。

function f1() {
let n = 5;
if (true) {
let n = 10;
}
console.log(n); //
}
//如果将let都改成var会打印10,这表示es6块级作用域外层代码块不受内层代码块的影响

补充

const实际上保证的并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。如果不太明白这句话的具体意思就一起来补一补js的基础知识了:数据类型。

这里就做个简要介绍,大神可以略过。

js数据类型可以分类基本数据类型(Number、String 、Boolean、Null和Undefined)和引用数据类型(Object 、Array)。

当我们定义一个变量的时候,系统会给这个变量分配一块内存。如果该变量是基本数据类型那么定义的数据就会保存在该内存中。但是!!注意这个但是!!!如果该变量是引用数据类型,那么该内存中保存的就不是定义的数据了,而是一个指针,这个指针指向另一个地址,数据就保存在这个指针所指向的地址里。

所以,对于引用类型数据而言,const只能保证内存中存放的指针不发生变化,不关心这个指针指向的地址里面的数据有没有变化。

const a = 1;
const a = 2; // 报错
const arr = [1, 2, 3];
arr[0] = 9;
arr // [9,2,3]

基本数据类型和引用数据类型区别的代码示例:

const a = 1;
const b = 1;
a == b // true 基本数据类型只做值的比较
//---------------------------
const arr1 = [1, 2, 3];
const arr2 = [1, 2, 3];
arr1 == arr2 //false 虽然值是一样的,但是在定义的时候分配的内存中的指针不一样,引用型数据不仅比较值也会比较指针,指针即地址
//---------------------------
const arr3 = [1, 2, 3];
let arr4;
arr4 = arr3;
arr4[0] = 999;
arr3 //[999,2,3] 赋值的时候将arr3的指针和值都赋给了arr4,所以arr3和arr4共用一个指针,指向同一个地址,所以……

欢迎扫描下方二维码关注,这里更多前端技术分享,让我们一起成长 -- web前端周刊

前端项目中常用es6知识总结 -- let、const及数据类型延伸的更多相关文章

  1. 前端项目中常用es6知识总结 -- 箭头函数及this指向、尾调用优化

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

  2. 前端项目中常用es6知识总结 -- Async、Await让异步美如画

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

  3. 前端项目中常用es6知识总结 -- Promise逃脱回调地狱

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

  4. ES6系列之项目中常用的新特性

    ES6系列之项目中常用的新特性 ES6常用特性 平时项目开发中灵活运用ES6+语法可以让开发者减少很多开发时间,提高工作效率.ES6版本提供了很多新的特性,接下来我列举项目中常用的ES6+的特性: l ...

  5. 在Vue&Element前端项目中,对于字典列表的显示处理

    在很多项目开发中,我们为了使用方便,一般都会封装一些自定义组件来简化界面的显示处理,例如参照字典的下拉列表显示,是我们项目中经常用到的功能之一,本篇随笔介绍在Vue&Element前端项目中如 ...

  6. Android 项目中常用到的第三方组件

    项目中常用到的第三方组件 1 社会化分享ShareSDK-Core-2.5.9.jarShareSDK-QQ-2.5.9.jarShareSDK-QZone-2.5.9.jarShareSDK-Sin ...

  7. 项目中常用js方法整理common.js

    抽空把项目中常用js方法整理成了common.js,都是网上搜集而来的,大家一起分享吧. var h = {}; h.get = function (url, data, ok, error) { $ ...

  8. 记录下项目中常用到的JavaScript/JQuery代码二(大量实例)

    记录下项目中常用到的JavaScript/JQuery代码一(大量实例) 1.input输入框监听变化 <input type="text" style="widt ...

  9. 项目中常用的MySQL 优化

    本文我们来谈谈项目中常用的MySQL优化方法,共19条,具体如下: 一.EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划. 下面来个简单的示例,标注(1.2.3.4.5)我 ...

随机推荐

  1. C语言typedef struct具体解释

    在C中定义一个结构体要用typedef,如: typedef struct Student { int a; }Stu; 于是在声明变量的时候就能够:Stu stu1;(假设没有typedef就必须用 ...

  2. OPENCV(4) —— ImgProc

    2D图像滤波器基础类BaseFilter:dst(x,y) = F(src(x,y), src(x+1,y)... src(x+wdith-1,y), src(y+1,x)... src(x+widt ...

  3. javaScript学习之正则表达式初探

    正则表达式    正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式通常被用来检索.替换那些符 ...

  4. 推荐学习《算法之美:指导工作与生活的算法》中文PDF+英文PDF

    我们所有人的生活都受到有限空间和有限时间的限制,因此常常面临一系列难以抉择的问题.在一天或者一生的时光里,哪些事是我们应该做的,哪些是应该放弃的?我们对杂乱无序的容忍底线是什么?新的活动与熟悉并喜爱的 ...

  5. 详解:Linux Chrony 设置服务器集群同步时间

    导读: Chrony是一个开源的自由软件,像CentOS 7或基于RHEL 7操作系统,已经是默认服务,默认配置文件在 /etc/chrony.conf 它能保持系统时间与时间服务器(NTP)同步,让 ...

  6. 紫书 习题 10-17 UVa 11105 (筛法)

    类似于素数筛的思想去做,不然暴力会超时而且还要判重 #include<cstdio> #include<cstring> #include<vector> #def ...

  7. PHP如何去掉多维数组的重复值

    1.定义函数 function array_unique_new($arr){ $t = array_map('serialize', $arr);//利用serialize()方法将数组转换为以字符 ...

  8. WebView的截屏实现

    WebView的截屏主要有两种实现方式: 方式1: bitmap = webView.getDrawingCache(); 可是,webView必需要mWebView.setDrawingCacheE ...

  9. Exception in thread &quot;main&quot; java.lang.UnsupportedClassVersionError: org/apache/ma ven/cli/Maven

    安装maven 中出现例如以下异常: Exception in thread "main" java.lang.UnsupportedClassVersionError: org/ ...

  10. Material Design控件使用学习 toolbar+drawerlayout+ Snackbar

    效果 1.,导包design包和appcompat-v7 ,设置Theme主题Style为NoActionbar 2.custom_toolbar.xml <?xml version=" ...