首页 > 代码库 > ECMAScript6学习之三

ECMAScript6学习之三

1、展开运算符(spread (...) operator)

   以前我们把某一个方法作为某一个对象的方法调用时,方法如下:

        function ecma(x, y, z) {
             alert(‘x:‘ + x + ", y=" + y + ‘, z=‘ + z);
	 }
	var args = [0, 1, 2];
	ecma.apply(null, args);

 有了ECMAScript6就可以变成如下形式了,

        function ecma(x, y, z) {
	     alert(‘x:‘ + x + ", y=" + y + ‘, z=‘ + z);
	}
	var args = [0, 1, 2];
	ecma(...args);
	
	当然也可以展开多个,如下:
	function ecma(v, w, x, y, z) {
	     alert(‘x:‘ + x + ", y=" + y + ‘, z=‘ + z);
	}
	var args = [ 1, 2];
	ecma(1,...args,...args);

更好的push方法,先看原来的实现方法,将一个数组的元素放进另外一个数组中

        var orginal = [1,2];
	var target = [4,5];
	Array.prototype.push.apply(target,orginal);
	
	note:自己可以试下target.push(orginal);

现在的实现如下:

        var target = [0, 1, 2];
	var orginal = [3, 4, 5];
	target.push(...orginal);
		
	还可以将类数组转换为数组,如[...nodeList]

 2、class,super,object literal extensions, template string,RegExp "y" and "u"             flags, defined array各浏览器都未实现

 3、2进制和8进制数据

     二进制整数: 0b010101 或 0B010101; 八进制整数: 0o7170 或 0O7170

 4、Map && weakMap

   (1)Map

     在java中,Map集合是我们最常用的元素,key-value方式是我们组织数据比较方便的形式,ES6中也引入了Map元素,但是js中的key和value可以是些特殊的值,比如说0、NaN。

    var map = new Map();
    map.set(‘key‘,‘1111‘);
    map.get(‘key‘);
    myMap.set(NaN, "not a number");
    myMap.get(NaN); // "not a number"
    myMap.set(0, "正零");
    myMap.set(-0, "负零");
    myMap.get(-0); // "负零"
    myMap.get(0);  // "正零"
			
    当然,value值还可以是更加复杂的结构,例子如下:
    var map = new Map();
    var obj = {
	name : ‘Eason‘,
	say : function(){
		alert(‘aaa‘);
	      }
	};
    map.set(‘key2‘,obj);
    var o = map.get("key2");
    o.say()

    当然了,你可以继续往map对象中set值,你也查看map对象的size,可以使用map.size.需要注意的是,在FF18及其以前的版本中需要使用 map.size(),清理map内的所有内容使用map.clear(),判断map中是否有相应的key值使用map.has(‘key‘);

    (2)weakMap

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

5、Set

    一个Set对象允许你向里面存储任意类型的唯一值(不能重复), 不管是原始值还是对象值

var mySet = new Set();
 mySet.add(1);
 mySet.add(5);
 mySet.add("some text");
 mySet.has(1); // true
 mySet.has(3); // false, 3没有被添加进这个set中
 mySet.has(5);              // true
 mySet.has(Math.sqrt(25));  // true
 mySet.has("Some Text".toLowerCase()); // true
			 
 mySet.size; // 3
 
 mySet.delete(5); // 从这个set中删除5
 mySet.has(5);    // false,5已经被删除了
			 
 mySet.size; // 2, 刚刚删除了一个元素
			 
 // 遍历set中的元素
 for (let item of mySet) 
  console.log(item); // 按顺序打印出: 1, "some text"
			 
  // 将一个set转换成数组
 var myArr = [v for (v of mySet)]; // [1, "some text"]
			 
 // 如果运行在一个HTML文档中,下面的代码也能正常工作
 mySet.add(document.body);
 mySet.has(document.querySelector("body")); // true

这次就到这里,有问题请留言!

本文出自 “Eason's hcc” 博客,请务必保留此出处http://hcc0926.blog.51cto.com/172833/1584255

ECMAScript6学习之三