众所周知,JavaScript有五种简单数据类型:Undefiend , Null , Boolean , Number 和String。还有一种复杂数据类型—Object。尤值一提的是JavaScript中Boolean值,true不一定等于1,而false也不一定等于0;
在JavaScript程序设计中,我们经常会碰到以下几种定义值,变量的情况。
如果没有参数,括号亦可省略,如:
2.基本类型值
当复制的变量类型是基本数据类型时,会在栈中创建一个新值,然后把该值复制到新变量分配的位置上。如:
JavaScript传递参数,与值的复制大同小异
向参数传递基本数据类型的值时,被传递的值会复制给一个局部变量(即函数的参数).如
但是,当参数传递为引用类型的值时,就不可同样对待了.因为程序会把当前值的指针作为参数,传递给函数内部的参数。此时,内外部参数的指针都指向堆中的同一个值(效仿值的复制)。如
以下一段程式更可直观的反应出引用类型值的指针传递
作用域问题:暂略;
内存问题:暂略;
在JavaScript程序设计中,我们经常会碰到以下几种定义值,变量的情况。
1.引用类型值
var person = new Object();
person.name = "JKCaptain";
alert(person.name); // JkCaptain
如果没有参数,括号亦可省略,如:
var person = new Object;
2.基本类型值
var name = "jkcaptain";
name.age ="27";
alert(name.age); //Undefiend
所以我们不能给基本类型值添加属性,尽管这样做不会导致报错。
当复制的变量类型是基本数据类型时,会在栈中创建一个新值,然后把该值复制到新变量分配的位置上。如:
var num1 = 5;
var num2 = num1; //5
当一个变量从另一个变量复制引用类型的值时,同样的会将栈中的值复制一份到新的变量空间中。从本质上来讲,复制过去的不是值,是指针。而这个指针指向堆里的一个对象
所以复制操作结束后,两个指针指向同一个变量。故而只要其中一个变量变化,就都会受到影响。如:
var obj1 = new Object;
var obj2 = obj1;
obj1.name = "JkCaptain";
alert (obj2.name); //JkCaptain;
JavaScript传递参数,与值的复制大同小异
向参数传递基本数据类型的值时,被传递的值会复制给一个局部变量(即函数的参数).如
function addNumber(num){
num += 10;
return num;
}
var count = 20;
var result = addNumber(count);
alert(count); //20
alert(result); //30
但是,当参数传递为引用类型的值时,就不可同样对待了.因为程序会把当前值的指针作为参数,传递给函数内部的参数。此时,内外部参数的指针都指向堆中的同一个值(效仿值的复制)。如
function setName(obj){
obj.name = "JkCaptain";
}
var person = new Object();
setName(person);
alert(person.name); //JkCaptain;
以下一段程式更可直观的反应出引用类型值的指针传递
function setName(obj){
obj.name = "JkCaptain";
var obj = new Object();//new一个新变量,指针与上述obj的指针不同。实际上,在函数中重写obj时,这个变量引用的就是一个局部变量了,函数执行完后会被立即销毁
obj.name = "jieke";
}
var obj = new Object();
setName(obj);
alert(obj.name); //JkCaptain 由此可见函数中内部声明的obj与此obj不是引用同一个堆中的变量
作用域问题:暂略;
内存问题:暂略;