关于es6的一些常用关键字以及set与数组的操作
2017-04-26 16:32
357 查看
因为一个数组取差集的需求,搜索答案中顺便学习了下es6的新语法,自己总结了下,感觉很有意义,希望对您有所帮助。
首先介绍下let,与var类似,但用let声明的变量的作用域只是外层块,而不是整个外层函数。
以下代码中还用到了set(一群值的集合,与数组类似)。
以下为es6常用关键字的简介总结。
let声明的全局变量不是全局对象的属性。这就意味着,你不可 以通过window.变量名的方式访问这些变量。它们只存在于一个不可见的块的作用域中,这个块理论上是Web页面中运行的所有JS代码的外层块。
形如for (let x…)的循环在每次迭代时都为x创建新的绑定。
let声明的变量直到控制流到达该变量被定义的代码行时才会被装载,所以在到达之前使用该变量会触发错误。
用let重定义变量会抛出一个语法错误(SyntaxError)。
一个Set不会包含相同元素,重复加入已有元素不会产生效果。
包含性检测。
不提供索引
以下是Set支持的所有操作:
new Set:创建一个新的、空的Set。
new Set(iterable):从任何可遍历数据中提取元素,构造出一个新的集合。
set.size:获取集合的大小,即其中元素的个数。
set.has(value):判定集合中是否含有指定元素,返回一个布尔值。
set.add(value):添加元素。如果与已有重复,则不产生效果。
set.delete(value):删除元素。如果并不存在,则不产生效果。.add()和.delete()都会返回集合自身,所以我们可以用链式语法。
setSymbol.iterator:返回一个新的遍历整个集合的迭代器。一般这个方法不会被直接调用,因为实际上就是它使集合能够被遍历,也就是说,我们可以直接写for (v of set) {…}等等。
set.forEach(f):直接用代码来解释好了,它就像是for (let value of set) { f(value, value, set); }的简写,类似于数组的.forEach()方法。
set.clear():清空集合。
set.keys()、set.values()和set.entries()返回各种迭代器,它们是为了兼容Map而提供的,所以我们待会儿再来看。
new Map:返回一个新的、空的Map。
new Map(pairs):根据所含元素形如[key, value]的数组pairs来创建一个新的Map。这里提供的pairs可以是一个已有的Map 对象,可以是一个由二元数组组成的数组,也可以是逐个生成二元数组的一个生成器,等等。
map.size:返回Map中项目的个数。
map.has(key):测试一个键名是否存在,类似key in obj。
map.get(key):返回一个键名对应的值,若键名不存在则返回undefined,类似obj[key]。
map.set(key, value):添加一对新的键值对,如果键名已存在就覆盖。
map.delete(key):按键名删除一项,类似delete obj[key]。
map.clear():清空Map。
mapSymbol.iterator:返回遍历所有项的迭代器,每项用一个键和值组成的二元数组表示。
map.forEach(f) 类似for (let [key, value] of map) { f(value, key, map); }。这里诡异的参数顺序,和Set中一样,是对应着Array.prototype.forEach()。
map.keys():返回遍历所有键的迭代器。
map.values():返回遍历所有值的迭代器。
map.entries():返回遍历所有项的迭代器,就像mapSymbol.iterator。实际上,它们就是同一个方法,不同名字。
首先介绍下let,与var类似,但用let声明的变量的作用域只是外层块,而不是整个外层函数。
以下代码中还用到了set(一群值的集合,与数组类似)。
//let setOfWords1 = new Set([1, 2, 3]); //let setOfWords2 = new Set([3, 5, 2]); var Array1 = [5,6,7,8,18,9,90,81]; var Array2 = [10,415,54,87,98,65,81]; let a = new Set(Array1); let b = new Set(Array2); // 并集 let unionSet = new Set([...a, ...b]); // set转化为数组 let unionSet1 = Array.from(unionSet); console.log(unionSet1); // 交集 let intersectionSet = new Set([...a].filter(x => b.has(x))); // set转化为数组 let intersectionSet1 = Array.from(intersectionSet); console.log(intersectionSet1); // 差集 let differenceABSet = new Set([...a].filter(x => !b.has(x))); // set转化为数组 let differenceABSet1 = Array.from(differenceABSet); console.log(differenceABSet1);
以下为es6常用关键字的简介总结。
关键字let
let声明的变量拥有块级作用域。也就是说用let声明的变量的作用域只是外层块,而不是整个外层函数。let声明的全局变量不是全局对象的属性。这就意味着,你不可 以通过window.变量名的方式访问这些变量。它们只存在于一个不可见的块的作用域中,这个块理论上是Web页面中运行的所有JS代码的外层块。
形如for (let x…)的循环在每次迭代时都为x创建新的绑定。
let声明的变量直到控制流到达该变量被定义的代码行时才会被装载,所以在到达之前使用该变量会触发错误。
用let重定义变量会抛出一个语法错误(SyntaxError)。
关键字const
const声明的变量与let声明的变量类似,它们的不同之处在于,const声明的变量只可以在声明时赋值,不可随意修改,否则会导致SyntaxError(语法错误)。关键字set
一个Set是一群值的集合。它是可变的,能增删元素。与数组区别如下:一个Set不会包含相同元素,重复加入已有元素不会产生效果。
包含性检测。
var setOfWords = new Set([1, 2, 3, "zythum"]); arrayOfWords = [1, 2, 3, "zythum"]; //判断set集合中是否包含“zythum” setOfWords.has("zythum") // 查询速度快 true //判断数组中是否包含“zythum” arrayOfWords.indexOf("zythum") !== -1 // 查询速度慢 true
不提供索引
以下是Set支持的所有操作:
new Set:创建一个新的、空的Set。
new Set(iterable):从任何可遍历数据中提取元素,构造出一个新的集合。
set.size:获取集合的大小,即其中元素的个数。
set.has(value):判定集合中是否含有指定元素,返回一个布尔值。
set.add(value):添加元素。如果与已有重复,则不产生效果。
set.delete(value):删除元素。如果并不存在,则不产生效果。.add()和.delete()都会返回集合自身,所以我们可以用链式语法。
setSymbol.iterator:返回一个新的遍历整个集合的迭代器。一般这个方法不会被直接调用,因为实际上就是它使集合能够被遍历,也就是说,我们可以直接写for (v of set) {…}等等。
set.forEach(f):直接用代码来解释好了,它就像是for (let value of set) { f(value, value, set); }的简写,类似于数组的.forEach()方法。
set.clear():清空集合。
set.keys()、set.values()和set.entries()返回各种迭代器,它们是为了兼容Map而提供的,所以我们待会儿再来看。
关键字map
一个Map对象由若干键值对组成,是一种更完善的Hash结构实现,类似于对象中的键值对应:var m = new Map(); m.set(o: "content"); var o = {p: "Hello World"};
new Map:返回一个新的、空的Map。
new Map(pairs):根据所含元素形如[key, value]的数组pairs来创建一个新的Map。这里提供的pairs可以是一个已有的Map 对象,可以是一个由二元数组组成的数组,也可以是逐个生成二元数组的一个生成器,等等。
map.size:返回Map中项目的个数。
map.has(key):测试一个键名是否存在,类似key in obj。
map.get(key):返回一个键名对应的值,若键名不存在则返回undefined,类似obj[key]。
map.set(key, value):添加一对新的键值对,如果键名已存在就覆盖。
map.delete(key):按键名删除一项,类似delete obj[key]。
map.clear():清空Map。
mapSymbol.iterator:返回遍历所有项的迭代器,每项用一个键和值组成的二元数组表示。
map.forEach(f) 类似for (let [key, value] of map) { f(value, key, map); }。这里诡异的参数顺序,和Set中一样,是对应着Array.prototype.forEach()。
map.keys():返回遍历所有键的迭代器。
map.values():返回遍历所有值的迭代器。
map.entries():返回遍历所有项的迭代器,就像mapSymbol.iterator。实际上,它们就是同一个方法,不同名字。
相关文章推荐
- Oracle 10G中关于表操作常用语句详解以及一点随想
- Iphone数组一些基础操作 NSArray/NSMutableArray,以及内存注意问题。
- 关于 Window.setAttributes(LayoutParams a) 的一些操作 全屏 ,设置亮度 关闭键盘灯等
- C语言中关于数组、指针以及函数的一些基本知识
- 关于php操作mysql执行数据库查询的一些常用操作汇总
- Oracle 10G中关于表操作常用语句详解以及一点随想
- objective-c中对象所有权的内存管理(关于set,get方法),以及如何使用@property来进行简易操作(九)
- C#中关于进程的一些常用操作
- Shell常用的一些操作集锦(如字符串截取、字符串比较以及For循环等)
- 关于 android Intent 传对象和对象数组的一些操作
- 简单的new操作重载以及关于内存的一些体会
- 关于ArrayList以及简单哈希表中的一些常用的东东
- MySql的增删改查以及常用的一些操作
- 黑马程序员JAVA基础-数组以及一些基本操作
- 关于arrylist的一些操作(包含利用params传递数组参数)
- squid 的一些常用操作,以及反向代理测试
- 数组的一些常用操作
- 关于过去工作的一些总结:常用sql语句以及数据库查询优化
- 关于寄存器操作的一些常用方法
- 关于php操作mysql执行数据库查询的一些常用操作汇总