代码改变世界

javascript 基本类型和引用类型的区别

2014-04-21 18:35  Z梦  阅读(203)  评论(0编辑  收藏  举报
基本类型

基本类型为:可以用typeof检测为什么类型

  • undefined   变量未赋值时为undefined   var some; typeof some //undefined
  • number  typeof 12   //number
  • null      var call=null  typeof car //object

    从逻辑上讲,表示一个空对象指针,这也是typeof null为object的原因,如果定义的变量将来用于保存对象,建议初始化的时候为var obj=null,这样一来,直接检查null的值就可以知道相应的变量是否已经保存一个对象的引用

  • boolean typeof true   //boolean
  • string typeof "hello"  //string
  • object   var obj={},  typeof obj //object
引用类型
  • object  object有两种创建方式
    var person=new Person();
    person.name="Lily";
    person.age=22
    var person={
                 name:“Lily”,
                 age:22
  • Array
  • Date
  • RegExp
  • Function
两者的区别

1.动态的属性

var person=new Object();
person.name="Lily";
alert(person.name)   //"Lily"
var person="Lily";
person.name="Lucy";
alert(person.name)  //undefined

可以看到我们可以给基本类型添加属性,但在下次访问的时候,这个属性就不见了,可以看出只能给引用类型添加属性

2.复制变量值

var num1=5;
num2=num1;
num1=7;
alert(num2) //5
var obj1={name:"Lily",age=22};
obj2=obj1;
obj.addr="shenzhen"
alert(obj2.addr)   //shenzhen

obj1和obj2都指向同一个对象,当obj1增加了addr属性后 ,可以通过obj2访问这个属性,因为这两个变量引用的都是同一个对象

3.传递参数

ECMAScript都是按值传递的

function add(num){
  num+=10;
  return num; 
}
var count=20;
var result=add(count);
alert(count) //20
alert(result) //30
function add(obj){
 obj.name="Lily";
}
var person=new Object();
person.name="Lucy";
add(person);
alert(person.name)  //Lily

person和obj引用的是同一个对象,即使这个对象是按值传递的,obj也会按引用来访问同一个对象,于是obj修改了属性name的值,person也会有反应

function add(obj){
 obj.name="Lily";
obj=new Object();
obj.name="Jack"; }
var person=new Object(); person.name="Lucy"; add(obj); alert(person.name) //Lily

这个例子就很好的证明了参数是按值传递的,如果是按引用类型,弹出的应该为Jack

4.检测类型

基本类型用typeof,引用类型用instanceof