js - 变量

148 阅读2分钟

变量

变量是数据的“命名存储”,用来储存信息。

变量声明

变量声明有以下方式:

var

var message;
//可以将变量定义和赋值合并成一行
var message = '1111'
// 已声明未赋值的值默认为undefined 并且可以通过变量名访问
 var lll;
 var mmm = '1111';
console.log(typeof lll) // undefined
console.log(mmm)// '1111'
//可以在一行中声明多个变量,也可以在一行中声明多个变量并赋值(const除外)
var lll,eee,ttt;
var lll = '1111',eee='222,ttt='333';
//除了const外  可以多次赋值
var a;
a= 1;
a=3;
console.log(a) // 3
// 可以将一个变量拷贝到另一个变量
let a = 3;
let b = 4;
b = a ;
console.log(b) //3

let

let message;
  1. ​ 不存在变量提升
 console.log(l)
 const l = 4
 //Cannot access 'l' before initialization
  1. ​ 存在暂时性死区
 let l = 4
  {
    console.log(l)
    let l = 6
  }
//  Cannot access 'l' before initialization
  1. ​ 不允许重复声明
 var l = 5
 let l = 8
//Identifier 'l' has already been declared
  1. ​ 拥有块级作用域
{
   let l = 9
}
console.log(l)
 //l is not defined

const (用于声明常量)

const message;
  1. 不存在变量提升

     console.log(m)
     const m = 4
     //Cannot access 'm' before initialization
    
  2. 不允许重复声明

        var m = 'Hello!'
        let a = 25
    
         const m = 'Goodbye!'
         const a = 30
         //Identifier 'm' has already been declared
    
  3. 拥有块级作用域

      {
        const m = 9
      }
       console.log(m)
    //m is not defined
    
  4. 声明后必须赋值,且赋值后不能修改(对于简单数据类型)

    const PI;
    //Missing initializer in const declaration
    //对于简单数据类型
    const s = 9
    s = 8
    //Assignment to constant variable. 
    //对于复杂数据类型 
     const obj = {}
     obj.a = 3
    // {a:3}
    

    const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。 对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。

变量命名

变量命名有以下限制:

  • 变量名称必须仅包含字母,数字,符号 $_

  • 首字符必须非数字。

  • 保留字不能使用

    // 有效的
    let userName;
    let test123;
    //无效的
    let 11mm
    let class
    
  • 命名区分大小写

  • 允许非英文字母,但不推荐

    let p
    let P;// 区分大小写
    let 我;//不推荐