首页教程Javascript

变量

Javascript变量

变量,源于数学中的能存储计算结果的概念

对于计算机编程,变量就是内存中的一块可以存储值的区域,这块区域有名字

变量有名字,变量可以存储值 ,如下图

image

声明变量

在 Javascript 中使用 var 关键字来声明变量

如下示例:

var age = 23; //声明变量 age console.log(age); // 输出:23

上面代码可知:

  1. 使用 var 关键字声明了一个变量,名字叫 age
  2. 同时给变量赋值为 23
  3. 使用 console.log() 函数输出变量的值
  4. // 后面的是注释,代码在执行过程中会被忽略

变量赋值

使用 = 给变量赋值,如上面的示例,把 23 赋值给了变量age

再来看一个示例:

var str = "example.com" ; //声明变量 str, 并赋值为 example.com console.log(str); //输出 : example.com

由上可知:字符串必须使用双引号引起来。也可以使用单引号

变量的命名规范

变量命名规范必须是以字母下划线 _ , 美元符号 $ 开头 , 并且区分大小写

下面是一些变量的名字的示例

//合法的名字 var age; var Age; //和 age 是两个不同的变量 var _name; var $book; var loginTime; //不合法的名字 var 23Age; var num+aa; var count@11;

变量的其它知识

1 变量的默认值

变量在声明的时候,如果没有赋值,则变量就会有一个默认值 undefined

var count; console.log(count); //输出:undefined

2 声明多个变量

使用 var 声明多个变量时,需要用逗号, 分隔

示例:

var a = 1 , b = 2 , c = 3; //同时声明a ,b ,c 三个变量

3 变量在 window 上

在最外层声明的变量,实际上是 window 对象的一个属性(在浏览器环境下)

示例:

count = 100; console.log(count); console.log(window.count); //输出: 100 100

常量

常量就是定义之后,值不能再被修改的变量。比如配置信息,一些枚举值等,都可以写成常量

在 ES6 之前是没有提供常量这一特性的。

但是根据常量的特性:定义赋值后不能被修改, 就可以通过一些方法来模拟常量

1. 采用大写变量名的方式

按照惯例,常量的命名一般都是大写,单词之间用下划线 _ 分隔。

示例:

var PI = 3.1415924; var DB_NAME = "root" var DB_PASSWORD = "123456"

不过这种定义常量的方式,本质上还是变量, 其值是可以随便改变的。

2. 利用对象中的属性来控制可写性,将对象的属性设置为只读

示例:

var CONFIG = {}; Object.defineProperty(CONFIG, 'DB_NAME', { value: 'root', writable: false, //设置为不可写 }); console.log(CONFIG.DB_NAME); // 输出:root CONFIG.DB_NAME = 'guest'; console.log(CONFIG.DB_NAME); // 因为不可被改写,所以输出:root

这种方式将常量都放在一个对象下,通过Object.defineProperty定义属性,设定其writablefalse,就可以防止被改写

但有一个问题,CONFIG 自身这个对象可能被修改。

换一个思路,既然在最外层声明的变量是放在window上的,那可以用这个方式往 window上挂不可改写的属性。

Object.defineProperty(window, 'DB_NAME', { value: 'root', writable: false, }); console.log(DB_NAME); // 输出:root DB_NAME = 'guest'; console.log(DB_NAME); // 因为不可被改写,所以输出:root

通常情况下 window 对象是不可被修改的,这样常量的安全系数就变得非常高,但缺点是可能性较差,通过一点修改可以提升可读性。

//定义一个函数 var define = function(name, value) { Object.defineProperty(window, name, { value: value, writable: false, }); }; define('DB_NAME', 'root'); define('DB_PASSWORD', 'root');

只要约定好使用 define 函数定义的都为常量即可。

还有两种方式,就是结合Object.sealObject.freeze的特性来声明常量。

前者可以使对象不能再被扩充,但是所有属性还需要再手动设置不可写,后者可以让对象不能扩充,属性也不能修改。

这里对这两个原生方法不再做过多描述,有兴趣可以查阅相关 API 资料。

小结

  1. 变量是内存中的一块区域,可以存储值

  2. 变量有名字,变量的名字是区分大小写的

  3. 变量的命名规范:必须是以字母下划线 _ , 美元符号 $ 开头 , 并且区分大小写

  4. 使用 console.log() 输出变量的值

  5. 关键字不能作为变量名

  6. 常量可以更改对象的属性的 writable 来模拟