js基础知识:变量

时间:2021-01-15 05:39:32

一、什么是变量?

在JavaScript中,变量用来存放值的,存放任何数据类型的值都可以,它就是值的容器。

二、变量怎么用?

(一)用var声明1个变量

在使用变量之前,需要var关键字来声明变量,变量的名字要有意义。比如:

(等号“=”就是赋值运算符,它的作用是把右侧的值 赋给 左侧的变量、对象属性、数组元素)

我们声明1个变量num,在变量num中存放(通过赋值来实现)1个原始类型的数据:

var num = 5; console.log(num); //

我们还可以让变量存放对象类型的数据:

var obj= {x:1,y:2}; console.log(obj); // Object {x: 1, y: 2} 

通常都是用var一次性初始化多个变量,省的老写“v-a-r”这3个字母了:

var num = 1, str = 'string', bol = false;

(二)变量的名字变量的名字有2点需要注意:

1.以字母、$(美元符号)、_(下划线)开头

2.区分大小写

三、变量中能存放些什么东西?

在变量中可以存放任意JS支持的数据,也就是 “原始类型”的数据 与 “对象类型”的数据 。

(一)JS中的数据类型

我们先来温习一下JS中的数据类型吧,大家都知道JS中的数据类型分为:“原始类型”和“对象类型”2种。

“原始类型”的数据有:数字(5)、字符串('hello')、布尔值(true/false)、null(特殊的原始值)、undefined(特殊的原始值)。

“对象类型”的数据有:数组([1,2,'welcome',false,{x:1,t:2}])、函数(function foo(){return '我是函数';})、对象({name:'ghettoboy',age:27})。

(二)在变量中存放“原始类型”数据 与 “对象类型”数据的差异

1.存放着实际的值——“原始类型”的数据

如果一个变量保存的是“原始类型”的值,那么变量保存的就是某个原始数据类型的值。比如下面你所看到的,变量a里面保存着数字5、变量str中存放着字符串'String'、变量bol放的是布尔值true,变量里保存的是实际的值。

var num = 5, str = 'String', bol = true, noVal = undefined, emptyObj = null;

2.存放的是内存地址——“对象类型”的数据

如果变量保存的是“对象类型”的数据,那么变量保存的就是1个内存地址,这个内存地址对应着1个“对象类型”的值。只要通过地址找到了,那么我们就可以操作它。

var obj = {x:1,y:2}, arr = ['你','hao','吗?'];
function foo(){
alert('静静的思考');
}

变量obj保存的1个内存地址,通过这个地址可以找到对象{x:1,y:2}、变量arr保存的是通向数组['你','hao','吗?']的地址,同样函数声明foo(foo和变量的作用一样)保存着找到这个函数的地址。

(三)把1个变量 赋值给 另1个变量

好,现在我们有两个变量,a,b。

当我们想把变量b 赋值给 变量a时,a得到的是“值” 还是 “内存地址”,就看变量b中存放着的是什么数据类型的值了。

a = b; // a会得到什么?这取决于b中存放的是什么数据类型的值

1.如果,变量b中存放着“原始类型”的值。

变量b中存放着“原始类型”的值,此时b保存的是1个值。a=b,那么首先复制出1份变量b所保存的值,然后将这个刚刚复制出来的值 赋给 变量a。

注意:此时变量b中还是存着自己的值,赋给变量a的那个值,是复制出来的值。

var a, b=10;
a = b; // 先复制一份b的值,也就是10,然后把这个刚复制出来的10放到变量a里面。
console.log(a); //
console.log(b); // 10
// 现在,变量a 与 变量b 都保存着10。我们说过变量只是个容器,2个不同的容器,你放什么,我放什么,互不干扰。
a = '来点新鲜的';
console.log(a); // '来点新鲜的'
console.log(b); // 变量b还是存着自己的10

2.如果,变量b中存放着是“对象类型”的值。

变量b中存放着“对象类型”的值,此时b保存的是1个内存地址,通过这个内存地址可以找到1个对象。a=b,那么也是先复制1份变量b保存的内存地址,然后将这个刚刚复制出的内存地址 赋值给 变量a。

现在,变量a、变量b都有同一个对象的内存地址。这意味着,通过任意1个变量对这个对象作出修改,都会在另1个变量中表现出来。

var a,b = [1,2,3];
a = b; // 现在变量a中保存着1个内存地址,这地址通向[1,2,3]
a[0] = '通过变量a来修改一下';
console.log(b); //["通过变量a来修改一下", 2, 3]
console.log(a); //["通过变量a来修改一下", 2, 3]

参考资料:

1.《JavaScript高级程序设计》(第3版) 4.1基本类型和引用类型的值

2.《JavaScript权威指南》(第5版) 4.4基本类型和引用类型