之前竟然对常量、字面量都没有搞清楚,要学习的真的是好的 刚才终于搞清楚了 是该好好在学一遍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只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,这完全不能由它控制。因此,将一个对象(或数组)声明为常量时一定要考虑好哦


JuliusDeng
12 声望2 粉丝