书接上文,废话不多说,直接进入正题,下面我们一起来讨论js中的变量那些事!
那什么是变量?
变量是存储信息的容器,可以存储任何类型的数据。
如何定义变量呢?
变量可以使用短名称,如x,y;也可以是长名称,如information,construction;但是定义变量也是有要求的,变量的首字母必须是由字母(a-zA-Z)或下划线(_)或美元符($)开头,不能是数字,
后面的可以是字母(a-zA-Z)或下划线(_)或美元符($)或者是数字,并且是区分大小写的,如:name和Name是不同的2个变量;
定义变量有多种方法,我们一一来看:
var name;
这里只是申明了一个变量name,因为没给这个变量赋值,所以他的值为“undefined”,表示无初始值;
var name = "tony";
var age = 27;
var girlFriend = false;
var fn = function(){};
这里定义了多个变量,name表示名字,值为“tony”,数据类型为字符串;age表示年龄,值为27,数据类型为number;girlFriend表示女盆友,值为否,数据类型为布尔值;
fn表示一个方法,值为一个函数,数据类型为对象(数据类型是后面要讲的东西,现在先拿出来,要是有不懂的,可以先放放,看看后面的数据类型篇,在看这里);
也就是说,变量是可以存放多种类型的,可以是字符串,数字,布尔值,对象等等,也可以是undefined。
你觉得就这样就完了吗?哈哈,才怪呢,如果变量只能做这点事,那真是屈才了
var obj = {"name":"tony","age":27,"girlFriend":false};
看看这个定义的obj变量,此时是一个拥有多个值的对象
看到这里,你是不是觉得感觉又像是掉进了课本里面的知识介绍,干巴巴,从上面描述到下面,马上要讲什么是局部变量,什么是全局变量,然后把局部变量是什么,全局变量是什么一摆,完事,这样真的好吗?不懂的还是不懂,浪费时间,怎么才能让初学者能够理解呢,这是我要思考的问题。
讲肯定是要讲,但不能像上面那么讲了,下面我们就来换一个画风!
标题上说,如何定义变量?我觉得首先要解决的是,什么是变量,先要弄懂这个东东是做什么用的,才好进行下一步,那什么是变量呢?
w3school上面的解释:变量是存储信息的容器。
JavaScript权威指南上面的解释:变量是一个和数值相关的名字。我们说变量“存储”了或“包含”了那个值。(尼玛,这是什么鬼解释)
JavaScript入门经典上的解释:变量是保存在内存的数据
貌似解释都好生硬,那我给一个并不权威的解释,只是为了理解:
变量就是一个贴着一个便签的盒子,便签上的名字就是这个变量的名字,盒子里面是什么东西,我不知道,可能是任何什么东西,也可能是空的,就看你放什么进去了(脑补一下,一个贴着标签的盒子,就是一个变量)
如果这么理解变量的话,那定义变量,简单来说就是贴标签了,那第一个知识点就来了,怎么来贴标签?
俗话说:无规矩不成方圆,凡是都有规矩,贴标签也一样
好像上面的这个比喻也不是很恰当,因为变量不是一个固定的值,它随时都可能会变的,有时候不需要你去放东西就能自己变,所以黑盒子感觉也严谨,那重新给一个定义:
变量就是一个用来表示一个变数的东西,即它是一个变化的数据。比如说time时间,今天是11月5日,明天就是11月6日,它就是存储这个时间这个数据的一个东西,恩,就这样,不纠结了。
首先你这个标签名字要按照格式来,变量名必须以字母,下划线,美元符($)开头,而且是严格区分大小写的(即name 和Name是2个变量),不能以数字开头,后面的就可以用任何字符(当然这里要强调的是,理论上是可以用任何字符,但是不推荐用特殊字符,因为要保证变量名的语义化,要有意义,你给一个n$%^32#这样的名字,鬼都不认识);那这里有涉及到了变量名的命名规范问题,这个在上篇已经讲解,如果有不清楚的,可以看这里!
其实就是申明变量了,通过var 关键字来申明一个变量,比如我们要申明一个表示名字的变量:
var name;
var name = "lingyun";
也可以不用var关键字来申明变量,不通过var申明的变量就隐式变量,又叫全局变量:
name;
name = 'lingyun';
咦,你这上面一会要用var关键字定义,一会又可以不用var关键字就可以定,这不是矛盾吗?还有你定义的关键字有的是有值的,有的又是没有值的,这是几个意思啊?
呵呵,这就牵扯出了2个很重要的知识点:全局变量与局部变量的关系,null与undefined之间的区别;好吧,把妖怪引出来了,不打打怪,怎么对的起观众呢,下面就对这2个知识点详细讲解一下:
我去,一不小心点了发布了,还没写完呢,本来想点草稿箱的,不能取消,汗,今天暂时就写这么多吧!
未完待续。。。