javascript中的变量
来自http://blankyao.cn
变量(variable)是一个和数值相关的名字,我们就说变量“存储”了或“包含”了那个值,有了变量,你就可以在程序中存储和运算数据了
1类型规则
2声明
3作用域内容
4解析方法
5无用存储单元的收集
6变量/属性二元性的问题
参考:javascript权威指南
1 变量的类型
javascript是无类型的(untype),也就是说js的变量可以存放任何类型的值,这点和php差不多,而java和c都只能存放它所声明了的特定类型的数据
eg. i=1;
i="qqq";
先把一个数值赋给一个变量,然后再把一个字符传赋给它在PHP和JS中是完全可以的,但是在c和java中确是不可以的
有一个特性是与js 缺少类型规则相关,在必要的时候js可以快速,自动地把一种类型的值转换成另外一种类型,在PHP中也是这样的,最典型的例子是把一个数值连接到一个字符串上,会自动把这个数字装换为相应的字符串
2 变量的声明
在js中,在使用一个变量前,必须要声明,这点个C是一样的但是和PHP不同。声明的方法和C 语言差不多的
var a;
var b;
或者
var a,b;
或者
var a="hello";
var b="love";
***如果给一个未声明的变量赋值,js 会隐式声明该变量 ,但是被创建的是全局变量,即使该变量只在一个函数体中使用。所以要特别注意的是在函数体内创建局部变量时一定要用var语句
3 变量的作用域
在这里我不想做太多的解释,只想说一个地方:在函数体内部,局部变量的优先级比同名的局部变量高。
eg.
JavaScript代码
scope="global"; //声明一个全局变量
function checkscope()
{
scope="local";//改变了全局变量
document.write(scope);//使用的是全局变量
myscope="local";//隐式声明新的全局变量
document.write(myscope);//使用的是新的全局变量
}
checkscope();//输出“locallocal”
document.write(scope);//输出“local”
document.write(myscope);//输出“local”
另外,和C与JAVA 不同的是,js没有块级作用域
4 解析方法
可以将数据类型分为两组,即基本类型和引用类型
基本类型:数值,布尔值,null和未定义的值
引用类型:对象,数组,函数
基本类型在内存中具有固定的大小,可以存储在变量中;引用类型没有固定大小,所以不能将它们的值存储在变量中,存储的是对这个值的引用,通常引用的形式是指针或者内存地址
5无用存储单元的收集
c和c++这样的语言中,内存必须手动的释放,而js则不要求手动释放,它使用一种称为存储单元收集(garbage collection)的方法.
eg. var s="hello";//给一个字符串分配内存
var u=s.toUpperCase();//创建一个新字符串
s=u;//覆盖对原始字符串的引用
运行了这个程序就不能再获得原始的字符串"hello",因为程序没有变量再引用它了.系统检测到这一事实后,就会释放该字符串的存储空间以便这些空间再被利用
6变量/属性二元性的问题
变量基本上和对象是一样的在执行任何代码之前,都要创建一个全局对象,这个对象的属性就是js程序的全局变量.当声明一个全局变量时实际上做的是定义了那个全局对象的属性
局部变量又是什么呢?他们也是对象的属性,这个对象被称为调用对象