一、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. vue+element UI 使用select元素动态的从后台获取到

    VUE select元素动态的从后台获取到 <el-form-item label="选择店铺"> <el-select v-model="value& ...

  2. Bootstrap的模态框无法弹出的问题

    今天在使用Bootstrap官网所提供的模态框插件时候发现其中的 可选尺寸模态框 无法弹出 在模态框前使用过其他 Bootstrap的js插件,可以正常使用,说明所需依赖js文件已经正常引用 注意:j ...

  3. HTML对溢出的控制:overflow

    用于对超出模块的内容进行控制 overflow的三种参数 1.visible(默认):溢出部分可见 2.hidden:溢出部分隐藏 3.auto:适当加入滚动条 overflow使用方法 1.常用 o ...

  4. 残差网络resnet理解与pytorch代码实现

    写在前面 ​ 深度残差网络(Deep residual network, ResNet)自提出起,一次次刷新CNN模型在ImageNet中的成绩,解决了CNN模型难训练的问题.何凯明大神的工作令人佩服 ...

  5. Unity——资源文件夹介绍

    Unity资源文件夹介绍 1.编辑时 在Asset文件下存在Resources和SteamingAsset文件夹: Resources 只读不可修改,打包时直接写死,没有办法通过热更新替换资源: 可以 ...

  6. macbook air m1上传文件到github

    一,首先安装git,打开ssh文件里的id_rsa.pub,然后复制所有内容. 二,github上申请自己的账号,右上角settings里选择SSH and GPG keys,点击new ssh ke ...

  7. 题解 AVL 树

    link Description 给出一个 \(n\) 个点的 AVL 树,求保留 \(k\) 个点使得字典序最小. \(n\le 5\times 10^5\) Solution 因为我很 sb ,所 ...

  8. SpringMVC 获得请求数据

    获得请求参数 客户端请求参数的格式是:name=value&name=value- - 服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接收如下类型的参数: 基本类型 ...

  9. tomcat内存马原理解析及实现

    内存马 简介 ​ Webshell内存马,是在内存中写入恶意后门和木马并执行,达到远程控制Web服务器的一类内存马,其瞄准了企业的对外窗口:网站.应用.但传统的Webshell都是基于文件类型的,黑客 ...

  10. Mybatis 动态Sql练习

    建表 CREATE TABLE `student` ( `s_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT ...