ES 6

151 阅读2分钟

** 一、JSON数组格式转换 **

  1. 声明数组
let  json = {
    '0': 'jspang',
    '1': '技术胖',
    '2': '大胖逼逼叨',
    length:3//必须带length特殊的json格式都可以轻松使用ES6的语法转变成数组
}
  1. 对象转换成数组Array.from(xxx)
let  json = {
    '0': 'jspang',
    '1': '技术胖',
    '2': '大胖逼逼叨',
    length:3
}
 
let arr=Array.from(json);//ES6中绝大部分的Array操作都存在于Array对象里
console.log(arr)
  1. Array.of()方法 负责把一堆文本或者变量转换成数组
let arr =Array.of(3,4,5,6);
console.log(arr);
let arr =Array.of('技术胖','jspang','大胖逼逼叨');
console.log(arr);

二、数组的遍历

1. for…of循环:

2.需要数组的索引

let arr=['jspang','技术胖','大胖逼逼叨']
for (let index of arr.keys()){
    console.log(index);
}

3.同时输出数组的内容和索引:

let arr=['jspang','技术胖','大胖逼逼叨']
for (let [index,val] of arr.entries()){
    console.log(index+':'+val);
}

三、Symbol.iterator 和 for of 是es6的新特性 可以为对象设置 自己的迭代器

ES6中内置了一些Symbol,其中最重要的一个恐怕就是Symbol.iterator了,相当于迭代器的接口,只有对象里有这个symbol的属性,才可以认为此对象是可迭代的。
Object身上没有Symbol.iterator,当直接使用时会报错,出现错误,错误提示为:
JS中哪些对象里实现了这个接口呢?常见的有Array,String,arguments,还有后面高级的数据结构,如Set,Map等。

  1. 其实访问了 arr的迭代器调用next的方法的返回值中的value属性
  2. object 是不支持迭代器的,于是我们DIY一个:
 var obj ={
    name:1,
    age:13,
    home:"xxxx"
}
Object.defineProperty(obj,Symbol.iterator,{
    enumerable:false, //是否可枚举
    writerable:false, //是否可写
    configurable:true, //是否删除
    value:function(){
        var that  = this;
        var nowindex = 0;
        var key = Object.keys(that);

        return {
            next:function(){
                 var h =  {
                     value:that[key[nowindex]],
                     done:(nowindex+1 >key.length )
                 }
                nowindex++;
                return h
            }
        }
    }
})
for (var y of obj){
    console.log(y)
}
echo
1
13
xxxx

原文链接:blog.csdn.net/gjc9620/art… 3.使用iterator 之外,我们还可以使用 yield 语法来实现循环,yield相对简单一些,只要通过 yield 语句把值返回即可

let students = {
  [Symbol.iterator]: function*() {
    for(var i=0;i<=100;i++) {
      yield i;
    }
  }
}

for(var s of students) {
  console.log(s);
}

4.yield 和 iterator什么关系。这个我还不能确定,不过从用法上来说,可以基本认为 yield 只是 iterator 的语法糖,它其实就是最终生成了一个 iterator

let students = {
  [Symbol.iterator]: function*() {
    for(var i=0;i<=100;i++) {
      yield i;
    }
  }
}
var iterator = students[Symbol.iterator]();
var s=iterator.next();
while(!s.done) {
  console.log(s.value);
  s=iterator.next();
}

yield 语句其实就是生成了一个 iterator ,完全和直接写 iterator 没区别,不过好处是使代码变得简洁明了,因此建议直接使用 yield 语法而不要费力的去写 iterator。 原文链接:blog.csdn.net/lihongxun94…