zoukankan      html  css  js  c++  java
  • es6 const关键字

     const是constant(常量)的缩写,const和 let一样,也是用来声明变量的,但是const是专门用于声明一个常量的,顾名思义,常量的值是不可改变的。以前用var声明的变量,想怎么改就怎么改,同一个变量,后面的值可以轻松覆盖原来的值,这次const声明的变量,可由不得我们这么任性地想改就改了。

    1.不可修改

    const Name = '张三';
    Name = '李四';//错误,企图修改常量Name

    2.只在块级作用域起作用,这点与let关键字一样。

        if(1){
           const Name = '张三';
         }
        alert(Name);//错误,在代码块{ }外,Name失效

    3.不存在变量提升,必须先声明后使用,这点也跟let关键字一样。

        if(1){
            alert(Name);//错误,使用前未声明
            const Name = '张三';
        }

    4.不可重复声明同一个变量,这点跟let也一样。

        var Name  = '张三';
        const  Name = '李四';//错误,声明一个已经存在的变量Name

    5.声明后必须要赋值

    const NAME; //错误,只声明不赋值

    如果常量是一个对象呢?来看下面的代码

        const Person = {"name":"张三"};
        Person.name = "李四";
        Person.age = 20;
        console.log(Person);
        //结果:正常输出{name: "李四", age: 20}

    怎么常量Person好像被修改了,name改成了“李四”,而且还添加了age属性,值为20;怎么没有报错,还正常输出?

    这主要是因为传址赋值

    在赋值过程中,我们可以分为传值赋值和传址赋值。这里我们用到了传址赋值,什么叫传址赋值?

    传址:在赋值过程中,变量实际上存储的是数据的地址(对数据的引用),而不是原始数据或者数据的拷贝。

        var student1 = {"name":"张三"};
        var student2 = student1;
        student2.name = "李四";
        console.log(student1);
        //结果:输出 {name: "李四"}
        console.log(student2);
        //结果:输出 {name: "李四"}

    但是,如果这样写呢,就会报错:

        const Person = {"name":"张三"};
        Person.age = 20;
        Person = {}; 
        //错误,企图给常量Person赋新值(新地址)

    总结:const也是用于声明一个常量,并必须赋值,声明后不可修改,跟let一样,只在块级作用域起作用,不可重复声明同一个变量,不会变量提升,声明引用类型的常量时,要注意是传址赋值。

  • 相关阅读:
    ASP.NET CORE 使用Consul实现服务治理与健康检查(2)——源码篇
    ASP.NET CORE 使用Consul实现服务治理与健康检查(1)——概念篇
    Asp.Net Core 单元测试正确姿势
    如何通过 Docker 部署 Logstash 同步 Mysql 数据库数据到 ElasticSearch
    Asp.Net Core2.2 源码阅读系列——控制台日志源码解析
    使用VS Code 开发.NET CORE 程序指南
    .NetCore下ES查询驱动 PlainElastic .Net 升级官方驱动 Elasticsearch .Net
    重新认识 async/await 语法糖
    EF添加
    EF修改部分字段
  • 原文地址:https://www.cnblogs.com/whybxy/p/7263814.html
Copyright © 2011-2022 走看看