Javascript变量
变量
,源于数学中的能存储计算结果的概念
对于计算机编程,变量就是内存中的一块可以存储值的区域,这块区域有名字
变量有名字,变量可以存储值 ,如下图
声明变量
在 Javascript 中使用 var
关键字来声明变量
如下示例:
var age = 23; //声明变量 age console.log(age); // 输出:23
上面代码可知:
- 使用
var
关键字声明了一个变量,名字叫 age - 同时给变量赋值为 23
- 使用 console.log() 函数输出变量的值
-
//
后面的是注释,代码在执行过程中会被忽略
变量赋值
使用 =
给变量赋值,如上面的示例,把 23
赋值给了变量age
再来看一个示例:
var str = "www.helloworld.net" ; //声明变量 str, 并赋值为 www.helloworld.net console.log(str); //输出 : www.helloworld.net
由上可知:字符串必须使用双引号引起来。也可以使用单引号
变量的命名规范
变量命名规范必须是以字母
,下划线 _
, 美元符号 $
开头 , 并且区分大小写
下面是一些变量的名字的示例
//合法的名字 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
定义属性,设定其writable
为false
,就可以防止被改写
但有一个问题,
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.seal
与Object.freeze
的特性来声明常量。
前者可以使对象不能再被扩充,但是所有属性还需要再手动设置不可写,后者可以让对象不能扩充,属性也不能修改。
这里对这两个原生方法不再做过多描述,有兴趣可以查阅相关 API 资料。
小结
-
变量是内存中的一块区域,可以存储值
-
变量有名字,变量的名字是区分大小写的
-
变量的命名规范:必须是以
字母
,下划线 _
,美元符号 $
开头 , 并且区分大小写 -
使用
console.log()
输出变量的值 -
关键字不能作为变量名
-
常量可以更改对象的属性的 writable 来模拟