es6 标准入门教程学习(一)

1.var,let,块级作用域,const,顶层对象

1.var可以声明之前使用,值为undefined;let不可以,会报错ReferenceError

2.暂时性死区,有一种覆盖的感觉,就是起变量名注意一些,外部var,块内let,在let前赋值白能量不行,会出现上文一样的RE。就在let前不要使用该变量,‘暂时性死区’

使用let声明变量时,只要变量在还没有声明完成前使用,就会报错。

var x = x;
// x:undefined
let x = x;
// ReferenceError: x is not defined

let 不允许相同作用域重复声明(不能函数重复声明参数(换名字))

3.块级作用域解决问题:1.内部变量覆盖外部变量2.循环计数变量泄露

let实际上为 JavaScript 新增了块级作用域。

块级作用域内声明的函数类似于let,对作用域之外没有影响。(函数声明var,提升全局作用域比较好,函数声明还会提升在块级作用域的头部)避免在作用域中声明函数,块级作用域内部,优先使用函数表达式。(作用域!!{}必须用大括号)

4.const:简单类型数据,const,指向的内存地址中的数据就是本身值,对于符合数据,它指向的内春地址中的值就是地址,const只保证指向内存地址的数据不变(指针不变(感谢c))你不可以重新赋值

5.Object.freeze()冻结

var constantize = (obj) => {
  Object.freeze(obj);
  Object.keys(obj).forEach( (key, i) => {
    if ( typeof obj[key] === 'object' ) {
      constantize( obj[key] );
    }
  });
};

6.es6有六种声明变量的方法 import class

7.顶层对象 windows var function(我记得是向Object.protoType 添加属性)

8.globalThis:

浏览器window
浏览器,Web Workerself
Nodeglobal

全局环境中,this也会返回顶级对象,node模块和es6模块中,this返回当前模块(这个this跟原型链有关系)

2.解构赋值

1.模式匹配很好用,解构并不是啥高级词汇,虽然听起来很高级,

从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。

2.默认值:需要当一个数组成员(对象属性)严格等于 undefined 

3.对象的解构赋值可以方便的把现有对象的方法赋值给某个变量

// 例一
let { log, sin, cos } = Math;
// 例二
const { log } = console;
log('hello') // hello

4.Object.setPrototypeOf(obj1, obj2);继承属性1继承2,1的原型是2,是属性继承,原型链

5.

let x;
({x} = {x: 1});

已声明变量解构赋值。

6.[arr.length - 1] 对应键2

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

7.数值和布尔值的包装对象都有toString属性

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

8.函数参数默认值问腿:

function move({x, y} = { x: 0, y: 0 }) {
  return [x, y];
}
move({x: 3, y: 8}); // [3, 8]
move({x: 3}); // [3, undefined]
move({}); // [undefined, undefined]
move(); // [0, 0]

这个是提供默认值

function move({x = 0, y = 0} = {}) {
  return [x, y];
}
move({x: 3, y: 8}); // [3, 8]
move({x: 3}); // [3, 0]
move({}); // [0, 0]
move(); // [0, 0]
[1, undefined, 3].map((x = 'yes') => x);
// [ 1, 'yes', 3 ]

和上边是一样的属于解构

9.圆括号:可以使用圆括号的情况只有一种:赋值语句的非模式部分,可以使用圆括号。(模式就是结构匹配的头像键值对的键)

10.解构赋值对提取 JSON 对象中的数据,尤其有用。

11.

const map = new Map();
map.set('first', 'hello');
map.set('second', 'world');
for (let [key, value] of map) {
  console.log(key + " is " + value);
}
// 获取键名
for (let [key] of map) {
  // ...
}
// 获取键值
for (let [,value] of map) {
  // ...
}

map唠家常

12.

const { SourceMapConsumer, SourceNode } = require("source-map");

加载模块

3.字符串的拓展

1.U+005C:\ U+000D 回车 U+2028 

2.模板字符串`${}`

3.标签模板(模板字符串)

let a = 5;
let b = 10;
tag`Hello ${ a + b } world ${ a * b }`;
// 等同于
tag(['Hello ', ' world ', ''], 15, 50);

method

4.string.fromCodePoint(0x20BB7) 𠮷

5.icons.codePointAt(0).toString(16) 0x20BB7 参数,是字符在字符串中的位置(从 0 开始)

let s = '𠮷a';
s.codePointAt(0).toString(16) // "20bb7"
s.codePointAt(2).toString(16) // "61"
normalize()

JavaScript 将“𠮷”视为2个字符

6.String.raw

String.raw`Hi\n${2+3}!`
// 实际返回 "Hi\\n5!",显示的是转义后的结果 "Hi\n5!"
String.raw`Hi\u000A!`;
// 实际返回 "Hi\\u000A!",显示的是转义后的结果 "Hi\u000A!"

// `foo${1 + 2}bar`
// 等同于
String.raw({ raw: ['foo', 'bar'] }, 1 + 2) // "foo3bar"

7.includes() startsWith() endsWith(),endsWith()

8.repeat()    padStart()   padEnd()

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

9.trimStart(),tirmEnd();

const s = '  abc  ';
s.trim() // "abc"
s.trimStart() // "abc  "
s.trimEnd() // "  abc"

10.matchAll()

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值