一、let const

五个共同特点

  1. 不允许重复声明
  2. 块级作用域
  3. 不存在变量提升
  4. 不影响作用域链
  5. 暂时性死区---在代码块内,使用let/const命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”

const 特殊性

  1. 声明必须赋初始值;
  2. 标识符一般为大写(习惯);
  3. 值不允许修改;
  • 指向的那个内存地址所保存的数据不得改动。
  • 对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。
  • 对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。

二、解构赋值

允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构

  1. 数组的解构赋值
  2. 对象的解构赋值
  3. 字符串的解构赋值
  4. 数值和布尔值的解构赋值
  5. 函数参数的解构赋值

1、数组的解构赋值

数组的元素是按次序排列的,变量的取值由它的位置决定

let [a, b, c] = [1, 2, 3];

let arr = [1, 2, 3];
let {0 : first, [arr.length - 1] : last} = arr;
first // 1
last // 3

默认值

let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'

2、对象的解构赋值

对象的属性没有次序,变量必须与属性同名,才能取到正确的值

let { bar, foo } = { foo: 'aaa', bar: 'bbb' };
foo // "aaa" let { baz } = { foo: 'aaa', bar: 'bbb' };
baz // undefined let { first: f, last: l } = { first: 'hello', last: 'world' }
f // 'hello'
l // 'world const node = {
loc: {
start: {
line: 1,
column: 5
}
}
}; let { loc, loc: { start }, loc: { start: { line }} } = node;
line // 1
loc // Object {start: Object}
start // Object {line: 1, column: 5}

默认值

var {x, y = 5} = {x: 1};
x // 1
y // 5

注意

(1)如果要将一个已经声明的变量用于解构赋值,必须非常小心。

// 错误的写法
let x;
{x} = {x: 1};
// SyntaxError: syntax error
// 正确的写法
let x;
({x} = {x: 1});

3、字符串的解构赋值

  • 字符串也可以解构赋值。这是因为此时,字符串被转换成了一个类似数组的对象。
  • 类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值。
const [a, b, c, d, e] = 'hello';
a // "h"
b // "e" let {length : len} = 'hello';
len // 5

4、数值和布尔值的解构赋值

解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。

let {toString: s} = 123;
s === Number.prototype.toString // true let {toString: s} = true;
s === Boolean.prototype.toString // true

5、函数参数的解构赋值

三、字符串扩展

序号 写法 解释
1 Unicode 表示法 允许采用\uxxxx形式表示一个字符
2 for of 遍历 类似于for in ,可以便利原型链上的内容
3 字符串 模板字符串:可换行,${}传参
4 String.fromCodePoint()、ES5 fromCardCode 从 Unicode 码点返回对应字符
5 String.raw() 返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串
6 实例方法:codePointAt()、ES5 cardCodeAt() 字符转code码
7 实例方法:at(index) 查看指定位置的字符
8 实例方法:includes(), startsWith(), endsWith() 匹配是否存在
9 实例方法:repeat() 将原字符串重复n次
10 实例方法:padStart(),padEnd() 补全
11 实例方法:trimStart(),trimEnd() 消除空格
12 实例方法:replaceAll() 替换所有匹配的内容

1、Unicode 表示法

  • 允许采用\uxxxx形式表示一个字符
  • 限于码点在\u0000~\uFFFF之间的字符
    "\u{20BB7}"
    // ""
  • JavaScript 共有 6 种方法可以表示一个字符
    '\z' === 'z'  // true
    '\172' === 'z' // true
    '\x7A' === 'z' // true
    '\u007A' === 'z' // true
    '\u{7A}' === 'z' // true

2、for of 遍历

for (let codePoint of 'foo') {
console.log(codePoint)
}
// "f"
// "o"
// "o"

可以识别大于0xFFFF的码点

let text = String.fromCodePoint(0x20BB7);

for (let i = 0; i < text.length; i++) {
console.log(text[i]);
}
// " "
// " " for (let i of text) {
console.log(i);
}
// ""

3、模板字符串

let msg = `Hello, ${place}`;

4、String.fromCodePoint()

从 Unicode 码点返回对应字符

String.fromCodePoint(0x20BB7)

ES5 提供String.fromCharCode()方法

不能识别码点大于0xFFFF的字符。

String.fromCharCode(0x20BB7)

5、String.raw()

用来充当模板字符串的处理函数

返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,往往用于模板字符串的处理方法

let message1 = `Multiline\nstring`,
console.log(message1); // "Multiline message2 = String.raw`Multiline\nstring`;
console.log(message2); // "Multiline\\nstring

如果原字符串的斜杠已经转义,那么String.raw()不会做任何处理

String.raw`Hi\\n`
// "Hi\\n"

实现方式

String.raw = function (strings, ...values) {
let output = "";
let index;
for (index = 0; index < values.length; index++) {
output += strings.raw[index] + values[index];
}
output += strings.raw[index]
return output;
}

String.raw方法也可以作为正常的函数使用。这时,它的第一个参数,应该是一个具有raw属性的对象,且raw属性的值应该是一个数组

console.log(String.raw({ raw: 'test' }, 0, 1, 2))// 't0e1s2t'
// 等同于
console.log(String.raw({ raw: ['t', 'e', 's', 't'] }, 0, 1, 2))

6、includes(), startsWith(), endsWith()

  • includes():返回布尔值,表示是否找到了参数字符串。
  • startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
  • endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
let s = 'Hello world!';

s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true let arr = [1, 2, 3, ]
arr.includes(1) //true

注意:

  • 只针对字符串,数值类型不好用
  • 支持第二个参数,表示开始搜索的位置
let s = 'Hello world!';

s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false

7、repeat()

将原字符串重复n次。

'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""

注意:

  • 参数如果是小数,会被取整。'na'.repeat(2.9) // "nana"
  • 0 到-1 之间的小数,则等同于 0
  • 参数是负数或者Infinity,会报错
  • repeat的参数是字符串,则会先转换成数字
    'na'.repeat('na') // ""
    'na'.repeat('3') // "nanana"

8、ES7--padStart(),padEnd()

字符串补全长度的功能

字符串不够指定长度,会在头部或尾部补全

padStart():用于头部补全

padEnd():用于尾部补全。

'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax' 'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'

参数1:字符串补全生效的最大长度,

参数2:是用来补全的字符串

注意

  • 等于或大于最大长度,则字符串补全不生效,返回原字符串'xxx'.padStart(2, 'ab') // 'xxx'
  • 补全的字符串与原字符串,两者的长度之和超过了最大长度,则会截去超出位数的补全字符串'abc'.padStart(10, '0123456789')// '0123456abc'
  • 省略第二个参数,默认使用空格补全长度'x'.padStart(4) // ' x'

9、ES9--trimStart(),trimEnd()

与trim()一致消除空格,

trimStart()消除字符串头部的空格,

trimEnd()消除尾部的空格

10、replaceAll()

替换所有匹配的字符

'aabbcc'.replace('b', '_')
// 'aa_bcc'
'aabbcc'.replace(/b/g, '_')
// 'aa__cc'
'aabbcc'.replaceAll('b', '_')
// 'aa__cc'

11、at()

参数指定位置的字符

支持负索引(即倒数的位置)

const str = 'hello';
str.at[1] // "e"
str.at[-1] // "o"

四、数值扩展

序号 写法 解释
1 0b(或0B)和0o(或0O) 二进制和八进制表示法
2 1_000_000_000_000 数值分隔符
3 Number.isFinite(), Number.isNaN() 无穷,非数值类型
4 Number.parseInt(), Number.parseFloat() 整数,小数
5 Number.isInteger() 判断一个数值是否为整数。
6 Math 对象的扩展
7 BigInt 更长的数据类型

1、二进制和八进制表示法

二进制:前缀0b(或0B)

八进制:前缀0o(或0O)

0b111110111 === 503 // true
0o767 === 503 // true
Number('0b111') // 7
Number('0o10') // 8

2、 Number.isFinite(), Number.isNaN()

Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity

参数类型不是数值,Number.isFinite一律返回false

Number.isFinite(15); // true
Number.isFinite(0.8); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isFinite(-Infinity); // false
Number.isFinite('foo'); // false
Number.isFinite('15'); // false
Number.isFinite(true); // false

Number.isNaN()用来检查一个值是否为NaN

isFinite(25) // true
isFinite("25") // true
Number.isFinite(25) // true
Number.isFinite("25") // false isNaN(NaN) // true
isNaN("NaN") // true
Number.isNaN(NaN) // true
Number.isNaN("NaN") // false
Number.isNaN(1) // false

3、 Number.isInteger()

判断一个数值是否为整数。

Number.isInteger(25) // true
Number.isInteger(25.1) // false
Number.isInteger(25.0) // true
Number.isInteger(null) // false
Number.isInteger('15') // false
Number.isInteger(true) // false

4、Math 对象的扩展

写法 功能
Math.trunc() 去除一个数的小数部分,返回整数部分
Math.sign() 判断一个数到底是正数+1、负数-1、还是零0
Math.cbrt() 计算一个数的立方根
Math.hypot(,) 返回所有参数的平方和的平方根
Math.sinh(x) 返回x的双曲正弦(hyperbolic sine)
Math.cosh(x) 返回x的双曲余弦(hyperbolic cosine)
Math.tanh(x) 返回x的双曲正切(hyperbolic tangent)
Math.asinh(x) 返回x的反双曲正弦(inverse hyperbolic sine)
Math.acosh(x) 返回x的反双曲余弦(inverse hyperbolic cosine)
Math.atanh(x) 返回x的反双曲正切(inverse hyperbolic tangent)

5、 BigInt 数据类型

ES2020 引入了一种新的数据类型 BigInt(大整数),来解决这个问题,这是 ECMAScript 的第八种数据类型。BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。

1234 // 普通整数
1234n // BigInt // BigInt 的运算
1n + 2n // 3n
typeof 123n // 'bigint' BigInt(123) // 123n
BigInt('123') // 123n
BigInt(false) // 0n
BigInt(true) // 1n

ES6--ES12笔记整理(1)的更多相关文章

  1. ES6 学习笔记(整理一遍阮一峰大神得入门文档,纯自己理解使用)

    1.let命令 1)let和var的区别:let声明的变量只有所在的代码块有效. 2)没有变量的提升,一定要声明后使用.使用let命令声明变量之前,该变量都是不可用的.形成“暂时性死区”. 3)typ ...

  2. ES6读书笔记(三)

    前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,<ES6读书笔记(二)>,现在为第三篇,本篇内容包括: 一.Promise 二.Iterator和for of循 ...

  3. ES6读书笔记(二)

    前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,现在为第二篇,本篇内容包括: 一.数组扩展 二.对象扩展 三.函数扩展 四.Set和Map数据结构 五.Reflect 本文 ...

  4. JS第一周学习笔记整理

    目录 JS正式课第一周笔记整理 JS正式课第一周笔记整理 webstorm : 代码编辑器 浏览器: 代码解析器: Git : 是一个工具;用于团队协作开发项目管理代码的工具:在工作中用git.svn ...

  5. ES6入门笔记

    ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...

  6. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  7. 从0开始学Swift笔记整理(五)

    这是跟在上一篇博文后续内容: --Core Foundation框架 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Sw ...

  8. Deep Learning(深度学习)学习笔记整理系列之(五)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  9. 学习ReactNative笔记整理一___JavaScript基础

    学习ReactNative笔记整理一___JavaScript基础 ★★★笔记时间- 2017-1-9 ★★★ 前言: 现在跨平台是一个趋势,这样可以减少开发和维护的成本.第一次看是看的ReactNa ...

  10. Deep Learning(深度学习)学习笔记整理系列之(八)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

随机推荐

  1. 题解 [PA2019]Trzy kule

    link Description 对于两个长度为 \(n\) 的 \(01\) 串 \(a_1,a_2,\dots,a_n\) 和 \(b_1,b_2,\dots,b_n\),定义它们的距离 \(d( ...

  2. ORM框架查询数据库时返回指定的字段

    django model.objects.filter() 查询指定字段 1.model.objects.filter().values('field_name'),单个字段 2.model.obje ...

  3. 内网渗透DC-4靶场通关

    个人博客:点我 DC系列共9个靶场,本次来试玩一下DC-4,只有一个flag,下载地址. 下载下来后是 .ova 格式,建议使用vitualbox进行搭建,vmware可能存在兼容性问题.靶场推荐使用 ...

  4. Python爬虫:给我一个链接,快手视频随便下载

    前言 讲一下,文明爬虫,从我做起(1.文章中的程序代码仅供学习,切莫用于商业活动,一经被相关人员发现,本小编概不负责!2.请在服务器闲时运行本程序代码,以免对服务器造成很大的负担.) 1. 实现原理 ...

  5. 软件案例分析——VS、VS Code

    软件案例分析--VS和VS Code 第一部分 调研,测评 一.使用10–30分钟这个软件的基本功能(请上传使用软件的照片) VS code Visual Studio 二.主要功能和目标用户有何不同 ...

  6. (四)、Docker 镜像

    1.Docker镜像是什么? 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. 2.Do ...

  7. 进阶区forgotg攻防世界

    攻防世界进阶区--forgot 前言,这题中看不中用啊宝友!!! 1.查看保护 第一反应就是蛮简单的,32位. 2.获取信息(先运行程序看看) 装的可以,蛮多的东西. 但是就是中看不中用 3.ida ...

  8. [ NOIP2013 D2-T3 ] 华容道

    NOIP2013 华容道 图论好题. 介于网上全是些令蒟蒻头昏的题解和排版一塌糊涂以及过于详细的题解...蒟蒻记录一下.. 显然需要将白格移动到 \(s\) 相邻格,然后交换 \(s\) 与白格,再将 ...

  9. 如何洗白xi校长?(初稿)

    看看咱们太子殿下,谁还敢黑全世界最好的太子殿下 我们不如来考虑一下如何给校长洗白. 第一当然是买断热搜了.买断热搜可以阻止消息进一步传播.当然这种操作学校再8月18日晚就已经做过了.8月18日该条消息 ...

  10. 五分钟搞懂spring-cloud-square

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 初识spring-cloud-square 2021年 ...