20分钟上手ES6,不会ES6好意思说自己会JS ?
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
✍🏼作者周棋洛大二计算机学生
♉星座金牛座
🏠主页点击查看更多
🌐关键ES6
javascript
前端
文章目录
理解ES6
ECMAScript
是由网景公司制定的一种脚本语言的标准化规范
最初命名为Mocha
后来改名为LiveScript
最后重命名为JavaScript
ECMAScript 2015ES2015第 6 版最早被称作 ECMAScript 6ES6
添加了新的特性
这篇文章就是带大家学习ES6新增特性的加油哦
ES6 块级作用域 let
首先什么是作用域作用域简单讲就是声明一个变量这个变量的有效范围在 let
没来之前。js 只有 var
的全局作用域
和 函数作用域
ES6
为 js 带来了块级作用域
{
var a = "🍉";
let b = "⛳";
}
console.log(a);
console.log(b);
🍉
Uncaught ReferenceError: b is not defined
可以看到我们使用 var 关键字在块中定义了变量 a其实全局可以访问到所以说var声明的变量是全局的
但我们想让变量就在块中生效出了块就访问不了了这时就可以使用 ES6
新增的块级作用域关键字 let
来声明这个变量 a当我再次访问报错了说 a is not defined
a 没有定义
ES6 解构数组
如下所示首先定义了一个函数返回一个数组在未使用解构数组前调用数组并把返回值赋值给 temp 然后打印 temp 数组使用了解构数组
后直接定义一个数组变量然后将函数返回值指向该变量他会自动把第一项的值赋值给第一个数组变量第二项赋值给第二个数组变量以此类推最后打印三个变量看到没有问题
function breakfast() {
return ['🍉', '🍔', '🍕'];
}
var temp = breakfast();
console.log(temp[0], temp[1], temp[2]);
let [a, b, c] = breakfast();
console.log(a, b, c);
🍉 🍔 🍕
🍉 🍔 🍕
ES6 解构对象
首先 breakfast
函数返回一个对象
使用解构对象
定义对象键值对中键表示映射的实际对象的键名值就是自定义变量解构完成会自动完成赋值然后调用 breakfast 函数返回对象随后打印变量 abc 可以看到没问题
function breakfast() {
return { a: '🍉', b: '🍕', c: '🍔' }
}
let { a: a, b: b, c: c } = breakfast();
console.log(a, b, c);
🍉 🍕 🍔
ES6 模板字符串
在使用模板字符串前我们拼接字符串变量使用 +
使用 ES6 提供的模板字符串首先使用 `` 把字符串包起来当要使用变量时 使用 ${变量}
let a = '🍉',
b = '🖼️';
let c = '今天吃' + a + '吃完看' + b;
console.log(c);
let d = `今天吃 ${a} 吃完看 ${b}`;
console.log(d);
今天吃🍉吃完看🖼️
今天吃 🍉 吃完看 🖼️
ES6 判断字符串里是否包含其他字符串
使用这些函数可以轻松的完成是不是以什么开头的字符串是不是以什么结尾的字符串是不是包含了什么字符串等的操作
let str = '你好我是小周 ❤️';
console.log(str.startsWith('你好'));
console.log(str.endsWith('❤️'));
console.log(str.endsWith('你好'));
console.log(str.includes(" "));
true
true
false
true
ES6 默认参数
ES6里可以使用默认参数当调用函数时没有给参数进行赋值时就使用设置的默认参数执行当给参数赋值时就会使用新赋的值执行覆盖默认值使用如下
function say(str) {
console.log(str);
}
function say1(str = '嘿嘿') {
console.log(str);
}
say();
say1();
say1('❤️');
undefined
嘿嘿
❤️
ES6 展开操作符
使用 ...
可以展开元素方便操作使用如下
let arr = ['❤️', '😊', '😍'];
console.log(arr);
console.log(...arr);
let brr = ['王子', ...arr];
console.log(brr);
console.log(...brr);
[ '❤️', '😊', '😍' ]
❤️ 😊 😍
[ '王子', '❤️', '😊', '😍' ]
王子 ❤️ 😊 😍
ES6 剩余操作符
...
操作符用在函数参数上接收一个参数数组使用如下
function f1(a, b, ...c) {
console.log(a, b, c);
console.log(a, b, ...c);
}
f1('🍎','🌈','☃️','㊙️');
🍎 🌈 [ '☃️', '㊙️' ]
🍎 🌈 ☃️ ㊙️
ES6 函数名字
使用 .name
可以获取函数的名字具体使用如下
function f1() { }
console.log(f1.name);
let f2 = function () { };
console.log(f2.name);
let f3 = function f4() { };
console.log(f3.name);
f1
f2
f4
ES6 箭头函数
使用箭头函数可以让代码更简洁但是也要注意箭头函数的局限性以及箭头函数中自身没有 thisthis指向父级
let f1 = a => a;
let f2 = (a, b) => {
return a + b;
}
console.log(f1(10));
console.log(f2(10, 10));
10
20
ES6 对象表达式
使用es6的对象表达式如果对象属性和值一样可以省略值函数写法可以省去function
用法如下
let a = '㊙️';
let b = '☃️';
const obj = {
a: a,
b: b,
say: function () {
}
}
const es6obj = {
a,
b,
say() {
}
}
console.log(obj);
console.log(es6obj);
{ a: '㊙️', b: '☃️', say: [Function: say] }
{ a: '㊙️', b: '☃️', say: [Function: say] }
ES6 恒量
使用 const
关键字定义衡量const
限制的是给衡量分配值的动作并不限制衡量中的值使用如下
const app = ['☃️', '🌈'];
console.log(...app);
app.push('🤣');
console.log(...app);
app = 10;
可以看到当再次给衡量分配值就报错了
☃️ 🌈
☃️ 🌈 🤣
app = 10;
^
TypeError: Assignment to constant variable.
ES6 对象属性名
使用点定义对象属性时如果属性名中含有空格字符是不合法的语法通不过的使用 [属性名]
可以完美解决并且不仅可以直接写明属性名还可以使用变量来指定具体使用如下
let obj = {};
let a = 'little name';
obj.name = '王子';
// 使用点定义属性中间有空格是不合法的
// obj.little name = '小王子';
obj[a] = '小王子';
console.log(obj);
{ name: '王子', 'little name': '小王子' }
ES6 判断两个值是否相等
一些特殊值使用 ===
或 ==
进行比较的结果可能不满足你的需求这是你可以使用Object.is(第一个值第二个值)
来进行判断可能你就开心的笑了
console.log(NaN == NaN);
console.log(+0 == -0);
console.log(Object.is(NaN, NaN));
console.log(Object.is(+0, -0));
false
true
true
false
ES6 复制对象
使用 Object.assign()
可以把一个对象复制到另一个对象使用如下
let obj = {};
Object.assign(
// 源
obj,
// 复制目标对象
{ a: '☃️' }
);
console.log(obj);
{ a: '☃️' }
ES6 设置对象的 prototype
使用es6可以设置对象的 prototype使用如下
let obj1 = {
get() {
return 1;
}
}
let obj2 = {
a: 10,
get() {
return 2;
}
}
let test = Object.create(obj1);
console.log(test.get());
console.log(Object.getPrototypeOf(test) === obj1);
Object.setPrototypeOf(test, obj2);
console.log(test.get());
console.log(Object.getPrototypeOf(test) === obj2);
1
true
2
true
ES6 proto
let obj1 = {
get() {
return 1;
}
}
let obj2 = {
a: 10,
get() {
return 2;
}
}
let test = {
__proto__: obj1
}
console.log(test.get());
console.log(Object.getPrototypeOf(test) === obj1);
test.__proto__ = obj2;
console.log(test.get());
console.log(Object.getPrototypeOf(test) === obj2);
1
true
2
true
ES6 super
let obj1 = {
get() {
return 1;
}
}
let test = {
__proto__: obj1,
get() {
return super.get() + ' ☃️';
}
}
console.log(test.get());
1 ☃️
ES6 生成迭代器
在学习前先首写一个迭代器
function die(arr) {
let i = 0;
return {
next() {
let done = (i >= arr.length);
let value = !done ? arr[i++] : undefined;
return {
value: value,
done: done
}
}
}
}
let arr = ['☃️', '🤣', '🌈'];
let dieArr = die(arr);
console.log(dieArr.next());
console.log(dieArr.next());
console.log(dieArr.next());
console.log(dieArr.next());
{ value: '☃️', done: false }
{ value: '🤣', done: false }
{ value: '🌈', done: false }
{ value: undefined, done: true }
OK看看简化的生成器
function* die(arr) {
for (let i = 0; i < arr.length; i++) {
yield arr[i];
}
}
let test = die(['🌈','☃️']);
console.log(test.next());
console.log(test.next());
console.log(test.next());
{ value: '🌈', done: false }
{ value: '☃️', done: false }
{ value: undefined, done: true }
ES6 类
使用es6可以快速方便的构建类好耶
class stu {
constructor(name) {
this.name = name;
}
say() {
return this.name + '说奥里给';
}
}
let xiaoming = new stu("小明");
console.log(xiaoming.say());
小明说奥里给
ES6 get set
定义get/set方法用于获取或者修改类的属性
class stu {
constructor(name) {
this.name = name;
}
get() {
return this.name;
}
set(newStr) {
this.name = newStr;
}
}
let xiaoming = new stu("小明");
console.log(xiaoming.get());
xiaoming.set("大明")
console.log(xiaoming.get());
小明
大明
ES6 static
使用static关键字修饰的方法不用实例化对象也可以直接使用
class stu {
static say(str) {
console.log(str);
}
}
stu.say("奥里给 静态方法");
奥里给 静态方法
ES6 extends
使用继承可以减少代码冗余比如
class Person {
constructor(name, bir) {
this.name = name;
this.bir = bir;
}
showInfo() {
return '姓名' + this.name + '生日' + this.bir;
}
}
class A extends Person {
constructor(name, bir) {
super(name, bir);
}
}
let zhouql = new A("周棋洛", "2002-06-01");
// 周棋洛本身是没有showInfo方法的是继承自Person的
console.log(zhouql.showInfo());
姓名周棋洛生日2002-06-01
ES6 Set
Set 集合与数组不同Set 集合中不允许有重复元素
// 创建Set集合
let food = new Set('🍎🥪');
// 重复添加只有一个能进去
food.add('🍉');
food.add('🍉');
console.log(food);
// 当前集合大小
console.log(food.size);
// 判断集合中是否存在某一元素
console.log(food.has('🍉'));
// 删除集合中某一元素
food.delete('🥪');
console.log(food);
// 循环遍历集合
food.forEach(f => {
console.log(f);
});
// 清空集合
food.clear();
console.log(food);
Set(3) { '🍎', '🥪', '🍉' }
3
true
Set(2) { '🍎', '🍉' }
🍎
🍉
Set(0) {}
ES6 Map
Map结合存储键值对
let food = new Map();
let a = {}, b = function () { }, c = "name";
food.set(a, '🍉');
food.set(b, '🥪');
food.set(b, '🥪');
food.set(c, '米饭');
console.log(food);
console.log(food.size);
console.log(food.get(a));
food.delete(c);
console.log(food);
console.log(food.has(a));
food.forEach((v, k) => {
console.log(`${k} + ${v}`);
});
food.clear();
console.log(food);
Map(3) { {} => '🍉', [Function: b] => '🥪', 'name' => '米饭' }
3
🍉
Map(2) { {} => '🍉', [Function: b] => '🥪' }
true
[object Object] + 🍉
function () { } + 🥪
Map(0) {}
ES6 模块化
使用模块化开发es6可以方便的导入和导出一些内容还有默认导出等等细节
let a = '🍉';
let f1 = function (str = '你丫的写参数') {
console.log(str);
}
export { a, f1 };
import {a, f1} from './27模块测试.js';
console.log(a);
f1();
f1('知道了');
恭喜你读完了本篇文章能力 + 100 颜值 + 10欢迎下次再来。👋 先别走如果觉得文章写的不错还请点赞收藏关注帅气的博主啊手动狗头我会继续努力原创不易你的支持就是小周的动力 ☃️