javascript的变量是松散类型的,只是在特定的时间用于保存特定值的一个名字。变量的值及其数据类型可以在脚本的生命周期内改变。
数据类型包括:1.基本类型值,简单的数据段;2.引用类型值,由多个值构成的对象。
1.基本类型值
Undefined,Null,Boolean,Number,String。这五种变量是按值访问的,因为可以操作保存在变量中的实际的值。
2.引用类型值
是保存在内存中的对象,javascript不允许直接访问内存中的位置,也就是不能直接操作对象的内存空间。在操作对象的时候,实际上是在操作对象的引用。
3.动态的属性
对于引用类型的值,我们可以为其添加或删除其属性和方法,但是不能给基本类型的值添加属性,尽管不会导致任何错误。
4.复制变量值
基本类型:从一个变量向拎一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。新变量只是一个副本,这两个变量可以参与任何操作而不会相互影响。
引用类型:将存储在变量对象中的值复制一份放到为新变量分配的存储空间中,这个值的副本是一个指针,这个指针指向存储在堆中的一个对象,这两个变量实际上将引用同一个对象。
5.传递参数
所有函数的参数都是按值传递的,基本类型值的传递和基本类型变量的复制一样,而引用类型值的传递和引用类型变量的复制一样。
访问变量有按值访问和按引用访问两种方式,但是参数只能按值传递。
基本类型:被传递的值被复制给一个局部变量;
引用类型:这个值在内存中的地址复制给一个局部变量,所以局部变量的变化会反映在函数的外部。在函数内部修改了参数的值,但原始的引用仍保持不变,实际上在函数内部重写了obj时,这个变量引用就是一个局部对象了,所以不影响外部 的obj,所以这是按值传递的。
6.检测类型
基本数据类型检测:typeof操作符是检测最佳的工具,可以确定一个变量是字符串、数值、布尔值还是undefined。
字符串:string;
数值:number;
布尔值:boolean;
未赋值:undefined;
空值:object;
对象:object;
函数:function;
正则表达式:function;在IE和Firefox中,返回object;
引用类型检测:instanceof操作符,如果变量是给定引用类型的实例(根据原型链来识别),那么instanceof操作符就会返回true。
用法:变量 instanceof 引用类型
根据规定,所有引用类型的值都是object的实例,基本类型不是对象。