首页 > ES6 新特性

ES6 新特性

ES6

先阅读这个

http://gejiawen.github.io/2015/07/28/Javascript/ECMAScript6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E7%B3%BB%E5%88%97/ECMAScript6%E6%96%B0%E7%89%B9%E6%80%A7%E7%AE%80%E4%BB%8B/

ES6的特性在chrome中默认是关闭的

Visit chrome://flags/#enable-javascript-harmony, enable this flag, restart Chrome

注意

请在 Chrome Canary 中使用新特性

至少我这里Chrome 44 在选择打开后仍然无效

=> 箭头函数

var arr = [1, 2, 3];// 传统写法
arr.forEach(function (v) {console.log(v);
});// 使用箭头操作符
arr.forEach( v => console.log(v));

更多例子

// ES5
var total = values.reduce(function (a, b) {return a + b;
}, 0);// ES6
var total = values.reduce((a, b) => a + b, 0);

如果回调函数语句不止一行呢

// ES5
$("#confetti-btn").click(function (event) {playTrumpet();fireConfettiCannon();
});// ES6
$("#confetti-btn").click(event => {playTrumpet();fireConfettiCannon();
});

for of

  • forEach有什么缺点呢

    不能使用 break 语句来跳出循环,也不能使用 return 语句来从闭包函数中返回。总之 没有办法中止 forEach 循环 如果要中止,可使用 Array.every 或 Array.some

  • 如果使用for in呢
for (var index in myArray) { console.log(myArray[index]);
}

更不推荐 因为会遍历到其他属性上去

  • for of 它支持 break、continue 和 return 语句。
for (var value of myArray) {console.log(value);
}

for-of 不仅仅是为数组设计,还可以用于类数组的对象,比如 DOM 对象的集合 NodeList

代码来自

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of

目前Chrome Canary 46 并不支持

let articleParagraphs = document.querySelectorAll("article > p");for (let paragraph of articleParagraphs) {paragraph.classList.add("read");
}

Class

代码来自

http://gejiawen.github.io/2015/07/28/Javascript/ECMAScript6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E7%B3%BB%E5%88%97/ECMAScript6%E6%96%B0%E7%89%B9%E6%80%A7%E7%AE%80%E4%BB%8B/

// 类的定义
class Animal {// ES6中的构造器,相当于构造函数constructor(name) {this.name = name;}// 实例方法sayName() {console.log('My Name is ' + this.name);}
}// 类的继承
class Programmer extends Animal {constructor(name) {// 直接调用父类构造器进行初始化super(name);}// 子类自己的实例方法program() {console.log('I'am coding...');}// 静态方法static LEVEL() {console.log('LEVEL BAD!');}
}// 一些测试
var doggy=new Animal('doggy'),
larry=new Programmer('larry');
doggy.sayName(); // ‘My name is doggy’
larry.sayName(); // ‘My name is larry’
larry.program(); // ‘I'm coding...’
Programmer.LEVEL(); // ‘LEVEL BAD!’

解构赋值

摘自>http://gejiawen.github.io/2015/07/28/Javascript/ECMAScript6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E7%B3%BB%E5%88%97/ECMAScript6%E6%96%B0%E7%89%B9%E6%80%A7%E7%AE%80%E4%BB%8B/

利用这个特性,我们可以让一个函数返回一个数组,然后利用解构赋值得到数组中的每一个元素。


function getVal() {return [1, 2];
}var [x, y] = getValue();
var [name, age] = ['larry', 26];
// 交换两个变量的值
var [a, b] = [1, 2];
[a, b] = [b, a];
console.log('a: ' + a + ', b: ' + b);

新增集合 Map, Set, WeakMap, WeakSet

Set是单纯的集合 很像数组

var s = new Set();
s.add("hello").add("goodbye").add("hello");
s.size === 2;
s.has("hello") === true;

Map 很明显啦 key-value

var m = new Map();
m.set("hello", 42);
m.set(s, 34);  //这个s 是上面的set
m.get(s) == 34;

WeakSet

var ws = new WeakSet();
ws.add({ data: 42 });

WeakMap 简单的键/值映射.但键只能是对象值,不可以是原始值.

var wm1 = new WeakMap();
var o1 = {};
wm1.set(o1, 37);
wm1.get(o1); //37

和Map Set 区别

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap

references to objects in the collection are held weakly. If there is no other reference to an object stored in the WeakSet, they can be garbage collected. That also means that there is no list of current objects stored in the collection

The key in a WeakMap is held weakly. What this means is that, if there are no other strong references to the key, then the entire entry will be removed from the WeakMap by the garbage collector.

Array.from

这里的links 是真的数组哟 具备 forEach() 函数

var links = Array.from(document.querySelectorAll("aside > a"));
for (var l of links) {console.log(l.href);
}

转载于:https://www.cnblogs.com/cart55free99/p/4734982.html

更多相关:

  • //获取某一个cookie的值 const getCookie = key => {var k = key, dc = document.cookie;if (dc.length > 0) {var s = dc.indexOf(k + "=");if (s != -1) {s = s + k.length + 1;var e = d...

  • var SGheadMapPoints = {/*obj={ maxLng: minLng: maxLat: minLat: maxCount:最大人数 minCount:最小人数 total:点位数量 }*/get: function (obj) {var arr = [];obj.maxCount || (obj.maxCount...

  • //自动搜索指定的请柬 var alertTipText = "请柬找到了,就在这个网页里面,自己仔细看吧"; var delay = 1 * 1000;//1秒后循环下一页寻找 /*获取子DOM元素在父元素里面的索引位置(是第几个元素)*/ function getNodeListIndex(childNode) {return c...

  •  获取天气情况(不支持跨域) /*json原生获取*/ function getJSON() {var XML;var url = "http://wthrcdn.etouch.cn/weather_mini?city=杭州";if (window.XMLHttpRequest) {XML = new XMLHttpRequest(...

  •     $.ajax({type: "POST",url: "http://127.0.0.1:9999/api/demo/CURD",data: JSON.stringify({token: "sgToken",jsonPath: "user",username: "测试账号",password: "123456",name:...

  • var a = {a: 1}; var b = {b: 2}; var c = Object.assign(a, b);/* a对象也会改变,b不变,返回被被修改对象 */ var d = Object.assign({}, a, b); /* a,b不会被改变,返回新的对象 */ console.log("a", a); cons...

  • function regText(text){var reg = /^[su4e00-u9fa5a-z0-9_-]{0,}$/;if(!reg.exec(text)){console.log("非法字符")}else{console.log("有效字符")} } regText("abc+") 验证 :汉字、英文、数字、下...

  • 引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建(二)根据已知地图进行定位和导航(三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传我的Github。 这是第三部分,完成效果如下 图1 建图和导航 三、使用RTAB-Map进行建图和导航 1. rtab...

  • 引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建(二)根据已知地图进行定位和导航(三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传我的Github。 由于之前的虚拟机性能限制,我在这个项目中使用了新的ubantu 16.04环境,虚拟机配置 内存 8GCPU...

  • [{name:1},{name:2}].forEach((v,i,ar) => {console.log(v,i,ar)});//基础遍历[{name:1},{name:2}].map((v) => v.name);//[1,2]返回对象数组中指定字段值的一位数组(不改变原始数组)[{name:1},{name:2},{name:3}...

  • 体验内容 使用gmapping方法利用turtlebot底盘移动信息和激光雷达数据进行建图。 1. 安装一些依赖包 sudo apt-get install ros-melodic-move-base* sudo apt-get install ros-melodic-map-server* sudo apt-get insta...

  • 前言 我们知道Java/Python这种语言能够很好得 支持反射。反射机制 就是一种用户输入的字符串到对应实现方法的映射,比如http接口中 用户传入了url,我们需要调用该url对应的方法/函数对象 从而做出对应的操作。 而C++ 并没有友好得支持这样的操作,而最近工作中需要通过C++实现http接口,这个过程想要代码实现得优雅...