ES6新属性笔记
一、destructuring--解构赋值
1、数组解构赋值
(1)完全解构
let [a,b,c] = [1,2,3];//普通
console.log(a+":"+b+":"+c); let [a1, [[b1], c1]] = [1, [[2], 3]];//嵌套
console.log(a1+":"+b1+":"+c1); let [ , , third] = ["foo", "bar", "baz"];
console.log(third); let [x, , y] = [1, 2, 3];
console.log(x+":"+y);
这种解构赋值的方式很直观,数组嵌套的多了以后也好输出。
(2)不完全解构
let [x1, y1] = [1, 2, 3];
console.log(x1+":"+y1);
//x1 y1分别对应1 2
let [x3,, y3 = "cc", z3 = "ccy"] = [1, 2, 3];
console.log(x3+":"+y3+":"+z3);
//x3对应1;这里的2对应x3与y3之间的空变量;y3=‘cc’只是初始化一下值,当对应的数组中有值的话会直接被覆盖,这里的cc就已经被3覆盖掉了,z3就是ccy
let [a2, [b2], d2] = [1, [2, 3], 4];
console.log(a2+":"+b2+":"+d2);
//a2对应1,b2对应2,d2对应4
2、对象解构赋值
对象解构与数组解构基本一样
/*对象的属性没有次序,变量必须与属性同名,才能取到正确的值*/
let {foo, bar ,arr:[name,age,id="001"]} = {foo: "aaa", bar: "bbb" ,arr:["zhangsan","18"]};
console.log(foo+":"+bar+":"+name+":"+age+":"+id);
3、字符串解构
let [q,w,e] = "lemon";
console.log(e);
4、函数参数解构
let funObj = {
name:"lemon",
age:"18",
}
function show({name,age,id="001"}){
console.log(name+":"+age+":"+id);
}
show(funObj);
----------------------------------------------------------------------------------------------------------------华丽的分割线---------------------------------------------------------------------------------------------------------------
二、Symbol--定义一个独一无二的值
var x = 'lemon';
var y = 'lemon';
console.log(x == y);
console.log(x === y);
//此时x与y是相等的,毋庸置疑打印出来的自然是两个true; var m = Symbol('lemon');
var n = Symbol('lemon');
console.log(m == n);
//此时打印出的就是false了;
语法很简单,由Symbol定义出的是独一无二的;
三、set与WeakSet--ES6新增的数据类型
1、set
set是ES6新增的一种数据类型,语法特点与数组类似不同的是set数据结构里的的所有数据都是唯一的。
先来看下数组
var arr1 = [1,2,3,4,6,6,7,7,8];
for(var i = 0;i < arr1.length; i++){
console.log(arr1[i]);
}
for(var n in arr1){
console.log(arr1[n]);
}
arr1.map(function(val){ //依次遍历数组中的数据
console.log(val);
});
再来看下我们set数据结构,set数据是数组通过Set来转变的
var arr1 = [1,2,3,4,6,6,7,7,8];
var set1 = new Set(arr1);
//当数组转变为set数据时,数组中所有的重复数据都将会被删除,只会保留一个,此时set里面的数据只有 1,2,3,4,5,6,7,8;
/*for of语法遍历*/
for(var ele of set1){ //请忽略报错 for in循环不能遍历set集合 用for of
console.log(ele);
}
add方法来添加数据,类似数组的push方法
var set2 = new Set();
for(var i = 0 ; i < 10; i++){
set2.add(i);
}
console.log(set2);
我们还可以使用拓展运算符“[...set]”,将set集合转换为数组
//这里我们将上面的set2转化为数组
var arr = [...set2];
console.log(arr);
我们还可以通过delete方法删除set里面的数据
//此处还是拿上面的set2进行讲解
set2.delete(2);//这里的2不是索引,是数据,这里只能删除对应的数据;
还可以通过clear方法进行清空
set2.clear();
console.log(set2);
为什么在删除的时候没有使用索引,我们先来看看遍历的结果
let set3 = new Set(['lemon1','lemon2','lemon3',4,2,3,4]);
set3.forEach(function(index,val){
console.log(index+":"+val);
});
//index与他的value值相同;
使用has方法进行判断set中是否有对应数据
var set = new Set([1,2,3]);
console.log(set.has(3));//返回true
console.log(set.has(4));//返回false
set还有size属性,像数组里面的length
var set = new Set([1,2,3]);
console.log(set.size)//返回3
values方法可以遍历出所有值
var set = new Set([1,2,3]);
console.log(set.values); var newSet = ser.values();
for(var val of newSet){
console.log(val)
}
2、WeakSet
WeakSet类似于Set,也是不重复的值的集合。但是它只能用于存储对象。而不能是其他类型的值。
WeakSet是一个个构造函数。可以接受数组和类似数组的对象作为参数。(实际上,任何具作为iterable接口的对象都可以作为WeakSet的参数)。该数组的所有成员都会自动成为WeakSet的实例对象的成员。
WeakSet的一个用处是存储DOM节点,而不用担心这些节点从文档移除时,会引起内存的泄露。
具体内容这里就不讲解了。
代码格式如下:
/*WeakSet与Set使用方式类似,与set不同的地方在于WeakSet只能保存对象类型的数据*/
let ws1 = new WeakSet();
ws1.add(5);//报错 let ws2 = new WeakSet();
let num = new Number(5);
console.log(num);
ws2.add(num);//不报错 let data = new WeakSet();
var obj1 = {name:"ccy"};
var obj2 = new String("你好");
var obj3 = new Number(6);
data.add(obj1);
data.add(obj2);
data.add(obj3);
/*不能遍历、取值*/
for(let i of data){
console.log(i);
}
/*只能判断数据存不存在*/
console.log(data);
console.log(data.has(obj1));
//没有size属性,没有clear方法,拓展运算符不可用
这篇就说这么多,学到知识记得收藏加关注哟!
ES6新属性笔记的更多相关文章
- 常见ES6新属性
ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数(=& ...
- ES6 新特性(笔记)
1.定义变量 let a).块作用域 , 不同于var的函数作用域 b).不可以重复定义同一个变量名 注: {} ...
- 前端学习笔记 --ES6新特性
前言 这篇博客是我在b站进行学习es6课程时的笔记总结与补充. 此处贴出up主的教程视频地址:深入解读ES6系列(全18讲) 1.ES6学习之路 1.1 ES6新特性 1. 变量 2. 函数 3. 数 ...
- HTML5学习笔记(三)新属性、功能
HTML5 拖放 1.元素的 draggable 属性设置为 true 2.ondragstart 属性调用函数,函数中dataTransfer.setData() 方法设置被拖数据的数据类型和值 3 ...
- ES6新特性概览
本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...
- 总结常见的ES6新语法特性
前言 ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数 ...
- Atitit js版本es5 es6新特性
Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ...
- ES6新特性:Javascript中的Reflect对象
Reflect介绍: Reflect这个对象在我的node(v4.4.3)中还没有实现, babel(6.7.7)也没有实现 ,新版本的chrome是支持的, ff比较早就支持Proxy和Reflec ...
- ES6新特性:Proxy代理器
ES6新特性:Proxy: 要使用的话, 直接在浏览器中执行即可, node和babel目前还没有Proxy的polyfill;,要使用的话,直接在浏览器中运行就好了, 浏览器的兼容性为:chrome ...
随机推荐
- iPhone的刷机 iPhone进UDF
首先是进入udf出现问题.. 要点是 黑屏后按电源键到屏幕亮了+HOME键再一直按 按到黑屏 4秒左右后 放开HOME键 再按大概7秒就是udf界面了 不是界面~全黑的.你可以电源键是开不了机的. 然 ...
- Vim 第一天
记得第一次接触vi编辑器,好像是在海尔的机房吧,那是时候还是没有毕业的小菜鸟一只(PS:现在也是菜鸟),记得是测试一个云存储的产品.看着他们用vi编辑器,当时也没有感觉有什么(现在也没感觉……),只是 ...
- bzoj 3611[Heoi2014]大工程 虚树+dp
题意: 给一棵树 每次选 k 个关键点,然后在它们两两之间 新建 C(k,2)条 新通道. 求: 1.这些新通道的代价和 2.这些新通道中代价最小的是多少 3.这些新通道中代价最大的是多少 分析:较常 ...
- C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一)
引言 现在做游戏开发的没有几个不用Excel的,用的最多的就是策划.尤其是数值策划,Excel为用户提供强大的工具,各种快捷键,各种插件,各种函数.但是作为程序来说其实关注的不是Excel而是它最终形 ...
- 进度条(ProgressBar)的功能与用法
进度条也是UI界面中一种非常实用的组件,通常用于向用户显示某个耗时操作完成的的百分比.进度条可以动态的显示进度,因此避免长时间的执行某个耗时的操作,让用户感觉程序失去了响应,从而更好的提高用户界面的友 ...
- rf对时间控件的操作
1.如何去掉readonly属性 前端对于时间控件的设置,有时是为了限制用户不能进行手动输入方式进行选择时间,避免在手动输入的时候超限或者输入格式不正确,导致一些不必要的验证麻烦,这是前端开发工程师就 ...
- 简单js
js是一门弱类型的语言,要是你学过c/c++,那么上手js是一件简单的事情. js的变量是通过 var 来声明的.例如:声明一个变量 num 是这样的: var num; 我们也可以直接用 num , ...
- modprobe和insmod的区别
linux设备驱动有两种加载方式insmod和modprobe,下面谈谈它们用法上的区别1.insmod一次只能加载特定的一个设备驱动,且需要驱动的具体地址.写法为: insmod dr ...
- [CSS3] 学习笔记-HTML与CSS简单页面效果实例
一个简单的首页的设计: html文件: <!doctype html> <html> <head> <meta charset="UTF-8&quo ...
- ECMAScript 6 笔记(五)
Iterator和for...of循环 1. Iterator(遍历器)的概念 Iterator接口的目的,就是为所有数据结构,提供了一种统一的访问机制,即for...of循环 遍历器(Iterato ...