Javascript变量和属性的区别

变量和属性在javascript中的区别


在很多文章中都说变量其实就是属性,但是它们之间有一定的区别,例如:

在全局作用域下,

var a = "hello";

b = "hello";

从字面上看,它们的区别是一个前面加了var,一个没有;它们的相同点都是全局的;

那么a称之为变量,只不过它是全局变量;

b称之为属性,它是window对象的属性,因为在全局作用域下,浏览器默认会创建一个window对象,凡是通过全局定义的类似b = "hello",那么b称之为window对象的一个属性,你可以在chrome的console下打印window.b,结果是hello。


还有一个差别是变量不可以通过delete进行删除,但是属性可以通过delete进行删除;

执行下面的动作:

delete a;

a;"hello",说明a没有被删除;

delete b;

b; undefined, 说明b已经被删除了。

再举下面的例子来说明他们之间的另一个细微的差别:

运行下面语句之前并没有对mynamespace进行声明。

var myNameSpace1 =myNameSpace1 || {};

myNameSpace2 = myNameSpace2|| {};

运行之后你会发现第一行语句可以运行成功,并且myNameSpace1= {};

但是第二行会抛出exception,出现myNameSpace2is not defined.

首先区分一下undefined和 xxxis not defined,这两个是不一样的,如果一个变量是undefined,那么说明这个变量被声明了,只是没有被定义,不知道用来干什么,但是它是有值的,为undefined。

var a; 打印a的值为undefined。

但是xxxis not defined是从来没有在内存中出现过的东西,如果你要打印它或者用它,都会接收到异常。

举一个现实中的例子,undefined表示你已被某个公司录用,但是还没有给你工号,以及分配部门,但是你去前台登记以及进入部门都是可以被允许的;

xxxis not defined是一个陌生人在公司了,会直接被保安挡住。

回到刚才var myNameSpace1 = myNameSpace1|| {};例子上,为什么它可以通过,是因为执行的时候,首先执行var myNameSpace1, 那么系统会把此myNameSpace1变量设为undefined,等号后面再取myNameSpace1会在全局环境下找变量myNameSpace1,发现myNameSpace1是undefined,所以一个undefined的变量可以赋值给其他变量。


myNameSpace2 =myNameSpace2 || {};执行失败的原因如下:

等号前面的myNameSpace2,javascript会把它当成是window对象的属性;

而等号后面的myNameSpace2,会把它当成是一个变量;

那么把myNameSpace2变量的值赋给window对象的属性myNameSpace2,就会出错,是因为myNameSpace2变量从来没有被声明过,所以会产生异常。


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值