分为两种类型:基本类型和引用类型
基本类型值:每一个数据包含自己特有的数据,只含有一种数据
是按值访问,直接对值进行操作
是保存在变量中 (栈内存)
引用类型:属于包含多个值的一个对象,一个对象包含很多属性
保存在内存中 Javascript 不允许直接访问内存,(不能直接操作对象的内存空间)
自我感觉是操作对象的属性 (堆内存中)
对于引用类型的值,可以动态的添加,删除,修改属性和方法
引用类型的变量实际包含的不是变量本身,而是一个指向该对象的指针
所以当复制一个引用类型时(一变则全变)
创建:
type 123456789101112131415161718192021222324
1: var person=new Object(); person.name="zf" person.age=18; alert(person);//弹框显示数据类型 document.write(person.name); 2: person={name:"zf",age:18}; alert(person); document.write(person.name);*/ 3:使用对象构造器,使用函数 function person(name,age) { this.name="zf"; this.age=18; } M=new person; alert(M); document.write(M.name);</script>
复制变量基本类型和引用类型的区别;
基本类型;
var n1="11";
var n2=n1; //n1=n2但是个有自己的内存,互不影响
引用类型:
var n1=new Object();
var n1=n2;
具有一致性:同时指向对中的一个对象(同一个),所以可以相互交换,所包含的属性,操作都一样,是相互影响的
传递参数
所有的函数的参数都是按值传递
<a href="http://www.cnblogs.com/imlucky/archive/2012/11/10/2763949.html">javascript传递参数</a>
#### 检测类型:基本类型数据:typeof 返回值是类型
var name="11";
alert(name) //string
函数返回function
引用类型:instanceof 返回值是布尔值
var person=new Object();
alert(person instanceof string) //检测是不是字符类型的
对于基本类型总是返回false
没有块级作用域:变量的作用范围
if(true)
{
var i=1;
}
alert(i) i=1;执行完if语句i 并没有销毁,
!当在函数中所用的变量没有声明变量;则该变量将被添加到全局环境中;当函数执行完时,变量不会释放,因为变成全局变量
所以建议:注意变量的声明
所有变量都含有执行环境(作用域)
执行环境:全局执行环境(执行完毕内存释放 除非自己手动释放内存(优化代码))
函数执行环境(执行函数时才会给分配内存,执行完则释放!!(局部变量一定要声明)不然会称为全局变量)
全局变量不能直接访问局部变量,但是局部变量可以直接访问全局变量,链的作用域,只能向上链中查找