乐趣区

字面量变量常量-let-const的理解

之前竟然对常量、字面量都没有搞清楚,要学习的真的是好的 刚才终于搞清楚了 是该好好在学一遍 js 的

字面量:在编程语言中,一般固定值称为字面量,如 3.14。

        不是一种值,而是一种变量记法
        等号右侧的值均为字面量  var a = 1
   . 数字(Number)字面量 可以是整数或者是小数,或者是科学计数 (e)。3.14   1001
   . 字符串(String)字面量 可以使用单引号或双引号:
     "John Doe"  'John Doe'
   . 对象(Object)字面量 定义一个对象:{firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}
    还有函数字面量、数组字面量等 

常量:与变量一样均是用于‘存储数据’的容器,只不过常量的值在程序的运行中不可以发生改变

        在 ES6 之前并没有声明常量的方法,在 ES6 中新增加了 const 来定义常量
        建议常量的命名全部大写,如果由多个单词构成,可以用下划线分割
        const MY_SITE="http://www.zhangpeiyue.com";//MY_SITE 为常量,"http://www.zhangpeiyue.com" 为字面量
        只能在初始化的时候被赋值,赋值以后不允许被再次赋值 

变量:也是用于存储数据的容器,在程序的运行中可以发生改变或者被再次赋值

        可以使用 var 关键字来声明变量,变量的值可以是任意类型。为了更好的阅读,建议变量使用驼峰命名法命名:var myName="js";//myName 为变量,“zhangpeiyue" 为字面量
        在 ES6 中新增了 let 关键字声明变量,作用与 var 类似,只是声明的变量只在其所在区域内有效:let str="es6";//str 为变量,"es6" 为字面量
        说明:var,let 和不用任何修饰的变量的区别
            num = 1  代表 window 的一个属性,不能使用 delete 删除
            var num = 1; 代表全家变量,可以使用 delete 删除
            let num = 1; 代表局部变量 

常量,变量,字面量的区别

    常量与变量的区别:常量与变量的存储方式是一样的,只不过常量必须要有初始值,而且值不允许被修改,而变量可以无初始值,且可以多次赋值。常量与字面量的区别:常量与字面量均不会被改变。常量为存储数据的容器,而字面量为等号右侧的值,字面量是由字符串,数字等构成的字符串或数值。

再说一下标识符:标识符是名称。在 JavaScript 中,标识符用于命名变量(以及关键词、函数和标签)。

                 标识符须除了关键字、保留字之外才行     

let 是声明变量

  1. 它不同于 var,不存在变量提升 在声明变量之前该变量是不可用的,否则会报错,这在语法上叫“暂时性死区”;
  2. let 不允许同一作用域内重复声明
  3. 在某些场合下 var 声明变量是不合理的

    ` 场景 1:内层变量覆盖了外层变量
    var tmp = new Date();
    function f () {console.log(tmp)
        if (false) {var tmp = 'hello world!'}
    }
    
    f () // undefined
    
    
    场景 2:用来计数的循环变量泄露为全局变量
    var a = 'hello'
    for (var i = 0; i<a.length; i++) {console.log(a[i]);   
    }
    console.log(i)  // 5
    这里 i 只是用来控制循环,但循环结束后,它并没有消失,而是泄露成了全局变量,这样可能很不好 所以 for(let i =0;...)可能会
    是更好的选择  `
    
  4. 关于块级作用域,可能有的小白不知道,其实它就是 {} {{}} 这就是两个块级作用域了
    let 就是给 js 新增块级作用域的那个法器

     一些说明  . 外层作用域无法读取内层作用域的变量
             . 块级作用域与函数声明有点复杂 就不多说了 但 ES6 支持(允许)在块级作用域内声明函数 

const 是声明常量

  1. 它声明一个只读常量,且一旦声明,就不能改变
    eg:const PI = 3.1415

          PI  // 3.1415
          PI = 3 // 报错 
  2. 声明必须赋值,否则报错
    eg: const FOO // 报错
  3. 不会提升,必须先声明再使用,否则报错
  4. 和 let 一样,不能重复声明,否则报错

const 本质:

const 实际上保证的并不是变量的值不能改动,而是变量指向的那个内存地址不得改动。
但这对于简单的数据类型来说(数值、字符串、布尔值等),值就是保存在变量指向的内存地址中,因此等同于常量(所以,说 const 是声明常量好像不太准确了)
但对于复合类型的数据(主要是数组和对象呐),变量指向的内存地址保存的只是一个指针,const 只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,这完全不能由它控制。因此,将一个对象(或数组)声明为常量时一定要考虑好哦

退出移动版