functionnwe(obj){
obj.name = "hcd";
var obj = newObject();
obj.name = "new HCD";
}
var person = newObject();
nwe(person)
console.log(person.name);//"hcd"
在obj.name = "hcd";时参数obj和person还指向堆内存的同一个对象,var obj = new Object();后就是不同的对象了,而是生成了一个局部对象,函数执行完后就会销毁,所以新的name属性就对person不起作用了。
在函数的内部又创建一个obj并没有替换掉原来的obj,可见参数都是局部变量,是按值传递的,不是按照引用
1.4检测类型
要检测一个变量的类型,我们可以通过typeof运算符来判别。诸如:
var box = 'Lee';
alert(typeof box); //string
虽然typeof运算符在检查基本数据类型的时候非常好用,但检测引用类型的时候,它就不是那么好用了。通常,我们并不想知道它是不是对象,而是想知道它到底是什么类型的对象。因为数组也是object,null也是Object等等。
这时我们应该采用instanceof运算符来查看。
var box = [1,2,3];
alert(box instanceof Array); //是否是数组
var box2 = {};
alert(box2 instanceof Object); //是否是对象
var box3 = /g/;
alert(box3 instanceof RegExp); //是否是正则表达式
var box4 = new String('Lee');
alert(box4 instanceof String); //是否是字符串对象
PS:当使用instanceof检查基本类型的值时,它会返回false。
一.基本数据类型基本数据类型:undefined null number string boolean这些类型在内存中分别占有固定大小的空间,他们的值保存在栈空间,我们通过按值来访问的。二.引用数据类型object引用类型的值,则必须在堆内存中为这个值分配空间。由于这种值的大小不固定,因此不能把它们保存到栈内存中。但内存地址大小是固定的,因此可以将内存地址保存在栈内存中。这样,当查询引用类型的变