zoukankan      html  css  js  c++  java
  • ES6学习之对象的扩展

    写在起前面的话:

      活到老学到老。对象(object)是 JavaScript 最重要的数据结构。ES6 的规范中对Object对象进行了升级。主要有以下几个地方:

    属性的简洁表示法:

    在es5中对象属性的标准写法是:

    var person={
                    name:"林"
                }

    属性名+冒号(:)+属性值

    在ES6中提供了一种简洁的写法

    var name="林",sex="钢铁直男"
                var person={
                    name,
                    sex
                }

    上面代码中,变量person直接写在大括号里面。这时,属性名就是变量名, 属性值就是变量值

    不仅是属性可以简写,函数也可以简写:

        var person={
                    pullHand:function(){
                        console.log('pullHand');
                    }
                }//ES5的写法
            var person={
                    pullHand(){
                        console.log('pullHand');
                    }
                } //ES6的写法           

    es5中的写法是:函数名+冒号(:)+function(函数关键字)+参数体()+方法体{ }

    es6中简写了写法:函数名+参数体()+方法体{ }

     属性名表达式:

    在es5中属性名有两种写法

    person.name="林";//第一种
    person["na"+"me"]="林";//第二种

    第一种是对象直接点出属性名,第二种是用字面量的方式,对象名j+[属性名字符串(属性名字符串可以是表达式)]。

    而在es6中可是使用中括号中加表达式来定义属性名。

        var firstname="na",lastName="me";
                var person={
                    [firstname+lastName]:"林"
                    }            
                console.log(person);//{name:"林"}

     可枚举性和遍历:

    es6中引入了“可枚举”(enumerable)这个概念,最初目的是为了在遍历的时候忽略掉一些属性,就像私有属性一样只能内部使用不会被外部调用一样。就比如下面这个栗子:

        <script>
                var person={
                    name:"",
                    sex:'boy'
                    }
    
                    for (let item in person) {
                        console.log('item',item);
                    }//输出 item name
                      //   item sex
    
            </script>        

    在没有做特殊的操作下:对象中定义的属性都是可枚举的,因而能够内遍历到,当你改变属性的描述如(enumerable=false)将sex属性改为不可枚举的时候,再使用for..in遍历的时候就遍历不出sex属性了。

    <script>
                var person={
                    name:"",
                    sex:'boy'
                    }
                    Object.defineProperty(person,"sex",{
                    enumerable: false
                    })//改变person对象的sex描述对象中的可枚举类型
                    for (let item in person) {
                        console.log('item',item);
                    }//输出 item name
    
            </script>

    引入可枚举使得属性的操作复杂了起来。也更有利于操作单个属性。

    在es6中一共有5中遍历的方法:

    (1)for...in

    for...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。

    (2)Object.keys(obj)

    Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。

    (3)Object.getOwnPropertyNames(obj)

    Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。

    (4)Object.getOwnPropertySymbols(obj)

    Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名。

    (5)Reflect.ownKeys(obj)

    Reflect.ownKeys返回一个数组,包含对象自身的所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。

    super关键字

    this关键字总是指向函数所在的当前对象,ES6 又新增了另一个类似的关键字super,指向当前对象的原型对象。

    <script>
                let person = {
                  name: 'lin'
                };
                
                let boy = {
                  name: 'linjb',
                  getName() {
                    console.log( super.name);
             console.log( super.name);
    }
    };
        Object.setPrototypeOf(boy, person);
    //将person设置为boy的原型
        boy.getName() // "lin"
                //'linjb'

    </script>

    对象的扩展运算符

    具体内容可以看我的另一篇博客   ES6 学习笔记-扩展运算符(...)

    链判定运算符

      在具体编程中,如果要读取对象内部的某个属性,往往需要判断一下该对象是否存在。比如,要读取html.body.name.firstName,安全的写法是写成下面这样。

    const firstName = (html
      && html.body
      && html.body.name
      && html.body.name.firstName) || 'default';

    或者使用三元运算符

    const firstNamer= html.body?html.body: undefined

    判断起来非常麻烦

    let  html={
                    body:{
                        name:"gfgff"
                    }
                    
                }
                let name=html?.body?.name?.fitstName||'defaunt';
                console.log('name',name);

    不过目前在谷歌浏览器中使用链判断运算符 解析器不认会报错

     

  • 相关阅读:
    window多线程编程
    强大的字符数组
    linux设置环境变量一些坑的总结
    Java hello world
    一次音频波形的问题
    0xfffxxx的负数表示
    pcm数据格式存储格式
    Pooled genome sequence strategies |representative genome assembly approaches|Domestication|GERP|selective sweep|Hybridization|Introgression|iHS|SNP genotyping arrays|haplotype
    【转】Fst指数
    index|substr
  • 原文地址:https://www.cnblogs.com/lin494910940/p/12466397.html
Copyright © 2011-2022 走看看