一、JS中变量的分类
在JS中,变量大致可以分为两类,即基本类型和引用类型。其中,基本类型指的是简单的数据段,而引用类型指的是由多个值构成的对象。1.基本类型:boolean、string、number、null、undefined.
2.引用类型:Object等等。
注:由于引用类型的值是保存在内存中的对象,javascript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。在操作引用类型的对象时,实际上是在操作对象的引用而不是实际的对象,因此,引用类型的值是按引用访问的。
二、动态的属性
1.引用类型(1)对于引用类型,我们可以直接为其添加属性和方法,也可以改变和删除其属性和方法。
(2)创建对象的属性后,如果对象不销毁或者其属性不被删除,那么这个属性将一直存在。
2.基本类型
(1)我们不能给基本类型赋值,虽然这样做不会导致任何的错误。
var name = "tom";
name.age = 30;
alert(name.age) //undefined`
三、变量值的赋值和存储
1.基本类型(1)如果从一个变量赋值到另一个变量,那么就会在变量对象上创建一个新值,然后把该值复制到为变量分配的新位置上去。
例: var num1 = 5;
var num2 = num1;
其中,num1中的5和num2中的5是完全独立的,这两个变量可以参与任何操作而不会相互影响。
2.引用类型
(1)当从一个变量向另一个变量赋值引用类型的值得时候,同样也会将存储在变量对象中的值赋值一份放在新变量的分配空间中。不同的是,这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象。赋值操作结束后,两个变量实际将引用同一个对象。因此,改变其中一个变量就会影响另一个变量。
var obj1 = new Object();
var obj2 = obj1;
obj1.name ='tom';
alert(obj2.name);//tom
四、传递参数
在ECMAScript中,所有函数的参数都是按值传递的。1.基本类型传参
function addNum(num){
num+=10;
return num;
}
var count = 20;
var result = addNum(count);
alert(count); //20
alert(result); //30
在向参数传递基本类型的值得时候,被传递的值会被赋值给一个局部变量(即一个命名参数,arguments对象中的一个元素)。
2.引用类型
function setName(obj){
obj.name = 'tom';
obj = new Object();
obj.name='jerry';
}
var person = new Object();
setName(person);
alert(person.name); //tom
(1)在向参数传递引用类型的值得时候,会把这个值在内存中的地址赋值给一个局部变量,因此这个局部变量的变化会反映在函数外部。
(2)即使在函数内部修改了参数的值,但原始的引用仍然保持不变。实际上,当在函数内部重写obj时,这个变量引用的就是一个局部对象。而这个局部对象会在函数执行完毕后立即销毁。
五、检测类型
1.typeof一般使用typeof来检测基本类型是字符串,数值,布尔值还是undefined的最佳工具。如果变量值是一个对象或者Null,返回object。
2.instanceof
语法:
result = variable instanceof constructor