基本类型
基本类型为:可以用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) //20alert(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