变量 11个月前

编程语言
886
变量

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 = "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定义属性,设定其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 来模拟

image
EchoEcho官方
无论前方如何,请不要后悔与我相遇。
1377
发布数
439
关注者
2265925
累计阅读

热门教程文档

React Native
40小节
CSS
33小节
Javascript
24小节
Flutter
105小节
Spring Cloud
8小节