javascript里ES6新增知识点

1.数组的扩展
Array.from() 对象类数组转为数组
Array.of()将括号内的参数转为数组形式
fill(值,参数1,参数2) 用第一个参数填充数组,参数1和参数2代表索引范围,含头不含尾,填充的内容不限制
个人总结:
1.Array.from() 对象要使用的话,自定义属性的属性名就要有序且对象加length属性值为原有的属性个数;类数组直接使用就行
// let obj = {
// name: ‘zhangsan’,
// age: 100,
// sex: ‘男’
// };

    // //经典面试题
    // let obj1 = {
    //     0: 'zhangsan',
    //     1: 100,
    //     2: '男',
    //     length: 3
    // }
    // console.log(Array.from(obj)); //[]
    // console.log(Array.from(obj1)); //["zhangsan", 100, "男"]

//2.类数组转数组 可以直接转换
// let aLi = document.querySelectorAll(‘li’); //获取的是li标签的类数组
// aLi = Array.from(aLi); //转换
// aLi.push(document.body);
// console.log(aLi);//[li, li, li, li, li, body]
2.数组添加自定义属性后,可以console.log出添加的属性,但是length不计入内,因为索引不是有序数字,for遍历不出自定义属性,如果想要通过for循环遍历出,那么自定义属性的属性名就要有序且对象加length属性,,值为原有的属性个数;for in可以遍历出
// let arr = []; //因为数组是对象,所以可以添加属性后不会立刻销毁,如果是字符串 数字 布尔值的话也可以加,但是是包装对象,离开离开销毁,无法输出
// arr.name = ‘lisi’;
// arr.age = 200;
// arr.sex = ‘女’;
// console.log(arr); //length=0 [name: “lisi”, age: 200, sex: “女”]

    // for (var i = 0; i < arr.length; i++) { //length:0,没有数组下标。
    //     console.log(arr[i]); //不能获取
    // }

    // for (var i in arr) { //无序的
    //     console.log(arr[i]); //可以获取 lisi  200  女
    // }

3.数组之所以可以添加自定义属性的原因是他是对象类型,而字符串 布尔值 数字类型可以添加自定义属性是因为包装对象的原因,但是他们是添加就销毁,不可能可以输出

2.遍历器
概念:一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)
Iterator 的作用有三个:
一是为各种数据结构,提供一个统一的、简便的访问接口;
二是使得数据结构的成员能够按某种次序排列;
三是 ES6 创造了一种新的遍历命令for…of循环, Iterator 接口主要供for…of消费。
数组,字符串是有部署了Symbol.iterator属性,具有 iterator 接口,对象没有,所以对象无法使用for of循环
for…of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList对象)、以及字符串。
for…of与其他遍历语法的比较
for循环这种写法比较麻烦,因此数组提供内置的forEach方法。
forEach没有返回值,无法中途跳出forEach循环,break命令或return命令都不能奏效。
for…in循环有几个缺点。
数组的键名是数字,但是for…in循环是以字符串作为键名“0”、“1”、“2”等等。
for…in循环不仅遍历数字键名,还会遍历手动添加的其他键,甚至包括原型链上的键。
某些情况下,for…in循环会以任意顺序遍历键名。
总之,
for…in循环主要是为遍历对象而设计的, 不适用于遍历数组 .
for…of循环相比上面几种做法, 有一些显著的优点。
有着同for…in一样的简洁语法, 但是没有for…in那些缺点。
不同于forEach方法, 它可以与break、 continue和return配合使用。
/提供了遍历所有数据结构的统一操作接口。

3.Symbol
1.Symbol的概念和特点。
Symbol–表示独一无二的值,它是js中的第七种数据类型,属于基本类型
Symbol():首字母大写。
Symbol 函数前不能使用new, 否则会报错, 原因在于symbol是一个原始类型的值, 不是对象。

symbol函数接收一个字符串作为参数,表示对symbol的描述,主要是为了在控制台显示,或者转为字符串的时候,比较容易区分。描述的内容相同仅仅表示的是描述,不代表其他的意义。
let s1 = Symbol(‘zhangsan’);
let s2 = Symbol(‘wangwu’);

    console.log(s1 == s2); //false,独一无二的,不会相同
    console.log(s1); //Symbol(zhangsan)
    console.log(s2); //Symbol(wangwu)

    let obj = {
        s1: 100, //s1:自定义的属性,和变量s1没有关系
        s2: 200,
        [s1]: 300, //这里的s1才是Symbol变量。
        [s2]: 400
    };

    // console.log(obj);

    for (let i in obj) {
        console.log(obj[i]); //100,200
    }

    //console.log(Object.getOwnPropertySymbols(obj)); //获取Symbol属性  [Symbol(zhangsan), Symbol(wangwu)]

    for (let i = 0; i < Object.getOwnPropertySymbols(obj).length; i++) {
        console.log(obj[Object.getOwnPropertySymbols(obj)[i]])
    }

4.set map结构
//1.set结构
//ES6提供了数据结构Set. 它类似于数组,但是成员的值都是唯一的,没有重复的值。
//Set 本身是一个构造函数,用来生成 Set 数据结构,数组作为参数

    //简单的数组去重
    var arr = [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 4, 4, 4, 6, 6, 6];
    console.log(new Set(arr)); //{1, 2, 3, 4, 5, …}
    // console.log([...new Set(arr)]);// [1, 2, 3, 4, 5, 6]

    let s1 = new Set(['zhangsan', 'lisi']); //生成一个set结构
    // Set类的属性--size(长度)
    // console.log(s1.size); //2
    // Set类的方法
    // Set.add(value) 添加一个数据, 返回Set结构本身, 允许进行链式操作。
    s1.add('wangwu').add('zhaoliu');
    console.log(s1); //{"zhangsan", "lisi", "wangwu", "zhaoliu"}
    // Set.delete(value) 删除指定数据, 返回一个布尔值, 表示删除是否成功。
    // console.log(s1.delete('zhaoliu')); //true
    // Set.has(value) 判断该值是否为Set的成员, 返回一个布尔值。
    // console.log(s1.has('lisi')); //true
    // console.log(s1.has('lisi123')); //false
    // Set.clear() 清除所有的数据, 没有返回值。
    // s1.clear();
    // forEach(): 使用回调函数遍历每个成员
    // s1.forEach((value, index, set) => {
    //     console.log(index + '---' + value); //索引和值是相等的。  zhangsan---zhangsan
    // });
    // console.log(s1); // {"zhangsan", "lisi"}


    //2.map结构
    //JavaScript 的对象(Object),只能用字符串当作键。这给它的使用带来了很大的限制。ES6 提供了 Map 数据结构。它类似于对象,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Symbol类型当作key输出时 无法确认是同一个key.

    // let m1 = new Map([
    //     ['name', 'zhangsan'],
    //     ['age', 100]
    // ]);

    // console.log(m1);//{"name" => "zhangsan", "age" => 100}


    let m1 = new Map([
        ['name', 'zhangsan'],
        [100, 1000],
        [true, 'hehe'],
        [undefined, 'xixi']
    ]);
    //map类的属性--size
    console.log(m1.size); //4

    // map.set(key,value) :设置键名key对应的键值value,然后返回整个map结构,如果key已经有值,则键值会被更新,否则就生成该键,可以链式操作。
    m1.set('age', 100).set('sex', '男');
    console.log(m1); //{"name" => "zhangsan", 100 => 1000, true => "hehe", undefined => "xixi", "age" => 100,"sex" => 男}
    // map.get(key) get方法读取key对应的键值,如果找不到key,返回undefined
    console.log(m1.get(undefined)); //xixi
    // map.delete(key) 删除某个键,返回true.如果删除失败,返回false.
    // map.has(key) 方法返回一个布尔值,表示某个键是否在当前map对象之中。
    // map.clear() 清除所有数据,没有返回值

    // map.entries() 返回键值对的遍历器
    console.log(m1.keys());
    console.log(m1.values());
    console.log(m1.entries());

    // map.forEach()   使用回调函数遍历每个成员。
    console.log(m1); //{"name" => "zhangsan", 100 => 1000, true => "hehe", undefined => "xixi"}
    m1.forEach((value, index, set) => {
        console.log(index + '---' + value); // 100---1000 true---hehe undefined---xixi age---100 sex---男
    });


    console.log(m1[Symbol.iterator]());
    for (let value of m1) {
        console.log(value);
        console.log(value[0]);
    }

个人见解,仅供参考,概不负责QAQ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值