• (1)ES6中let,const,对象冻结,跨模块常量,新增的全局对象介绍


    1.let声明变量,var声明变量,而const声明的常量

    2.let与var的区别

    let可以让变量长期驻扎在内存当作

    let的作用域是分块【 {快1  {快2 }  }每个大括号表示一个独立的块 】的,块内的变量不会覆盖块外的变量值。

    {

    //(模)块1

    let a = 1;

      if(true){

        //(模)块2

        let a = 2;

      }

    console.log(a); //1,因为块内的变量不会覆盖块外的变量值

    }

    let与var:同一个代码块里面不能出现变量重复声明

    3.const声明常量,常量的值一旦声明就整体就不能被改变,如果一个空数组或者json的话还是可以向他们里面添加成员,但可以通过【彻底冻结函数】来禁止添加成员。
    const的作用域也是分块的,const与let共同点:同一个代码块里面不能出现变量重复声明
    const PI = 3.1415926; //声明常量
    const对象声明后可以进行属性附值操作,但是不能重新对整个对象赋值操作【例如const json = {},json={name:'hao123'}】。

    4.const对象冻结

    //冻结1
    const person = Object.freeze();//冻结
    person.name = "zhangsan";
    person.age = 30;
    console.log(person.age);//30
    
    //冻结2
    const person = Object.freeze({});//冻结
    person.name = "zhangsan";
    person.age = 30;
    console.log(person.age); //undefined
    
    //冻结3
    const person = Ojbect.freeze({//冻结
        name:"张三",
        age:30;
    });
    console.log(person.age);//30

    5.forEach用法

    /**
     * forEach的用法,遍历一个对象
     * forEach(testfun[,thisobj]);
     */
    var arr = [1,2,3,4];
    
    //写法1
    arr.forEach(t1,arr);
    function t1(arg) {
        alert(arg);
    }
    
    //写法2
    arr.forEach(function (e) {
        alert(e);
    });

    6.彻底冻结对象的函数

    /**
     * 利用forEach来实现ES6彻底冻结对象的函数
     * @param  {[type]} obj [description]
     * @return {[type]}     [description]
     */
    /*ES6写法*/
    var constantize = (obj) => {
        Object.freeze(obj);
        Object.keys(obj).forEach( (key,value) => {
            if( typeof obj[key] === 'object' ) {
                constantize( obj[key] );
            }
        });
    };
    /*ES5写法*/
    var contantize = function (obj) {
        Object.freeze(obj);
        Object.keys(obj).forEach(function (key,value) {
            if( typeof obj[key] === 'object' ) {
                constantize ( obj[key] );
            }
        });
    }

    7.跨模块常量的使用

    //module.js文件的代码
    export const myjson = {
        varInt: 100,
        varFloat: 11.02,
        varString: 'abc'
    }
    
    
    //use.js
    import * as myjson form './module'; //导入module.js内接口对象myjson的全部成员,.js可以省略
    console.log(myjson.varInt);  //100
    console.log(myjson.varFloat); //11.02
    console.log(myjson.varString); //'abc'
    
    //otherUse.js
    import {myjson.varInt,myjson.varFloat} as myjson form './module';
    console.log(myjson.varInt);
    console.log(myjson.varFloat);
    
    //onlyInt.js
    import myjson.varInt as myjson form './module';
    console.log( myjson.varInt );

     8.全局对象属性

    全局对象属性,在浏览器环境指的是window对象,而Nodejs指的是global对象。
    在javascript语言中,所有的全局对象,所有的全局变量都是全局对象属性。如果var与function命令声明的变量是全局变量那么就属于全局对象属性。
    
    var myName = 'jewave';
    
    console.log(window.myName);//浏览器环境下的全局变量
    console.log(global.myName);//Node环境下的全局变量
    console.log(this.myName);//通用环境下的全局变量
    
    let herName = "hong";
    console.log(window.herName); //undefined
  • 相关阅读:
    POJ2407:Relatives(欧拉函数) java程序员
    POJ1664:放苹果(搜索) java程序员
    关于android中数据库的创建以及基础的增删改查的相应操作
    家庭版记账本app开发进度。开发到现在整个app只剩下关于图表的设计了,具体功能如下
    在tap的碎片上与活动进行绑定实现点击事件(日期时间选择以及按钮跳转时间)
    使用tap、Fragment等相关相关知识点。实现类似微信的界面
    android学习相关intent和fragment的先关知识点
    家庭记账本app进度之关于tap的相关操作1
    家庭版记账本app进度之关于listview显示账单,并为其添加点击事件
    家庭版记账本app进度之编辑框组件
  • 原文地址:https://www.cnblogs.com/jewave/p/6235111.html
Copyright © 2020-2023  润新知