1. 值(value)—— 变量保存的值
2. 在js中值分两种 —— 基本类型和引用类型
3. 基本类型 —— Number, String, Boolean, Null, Undefined, Object
4. 引用类型 —— 变量指向栈中保存的Object对象的引用(指针)
5.基本类型值:
(1) 例子:
<script>
var num1 = 12; // 初始化
var num2 = num1; // num2复制num1的值,复制完成后,两者独立存在
alert(num2); // 输出
</script>
总结:六种类型都一样
(2) 例子:函数传值
<script>
funcion fun(num){
num += 10; // var num += 10; ----> 局部变量,只能在函数内部起作用;num += 10; ----> 全部变量,能被函数外部使用
return num; // 从某种角度理解,函数相当于能够处理某种功能变量,函数的return相当于value
}
var count = 10;
var func = fun(count); // 创建一个变量保存fun()函数,并把count的值复制给参数num
alert(fun); // //20
</script>
(3)例子:函数传值
<script>
function fun(obj){ // obj指向局部对象
obj.name = "abc"; // 用函数修改对象
}
var person = new Object(); // 创建一个指向对象的变量
fun(person); // 按值传给obj
alert(person.name); // “abc”
alert(obj.name); // error obj指向的是局部对象,函数执行完销毁 (不存在)
</script>
总结:按值传递相当于把一个变量所保存的值或指针一模一样地复制给另一个变量,变量之间不相互影响
6.引用类型值:
(1)例子:
<script>
var ob1 = new Object(); // 创建一个对象,ob1指向该对象的指针
var ob2 = ob1; // ob2复制了ob1指向该对象的指针,完成后,两个变量指向同一个对象,用ob2增加或修改该对象,ob1可以表现出来
ob2.name = "abc"; // 增加对象一个名为name的属性
ob2.name = "cba"; // ob2再次添加名为name的属性
alert(ob1.name); // “abc” 输出对象属性
alert(ob1.name); // "cba" 当ob2再次添加名为name的属性,相当于重写了对象名为name的属性的值(被覆盖)
总结:ob2引用了ob1指向对象的指针,相当于两个变量同时指向了一个对象,两个变量可以修改对象,同时两个变量会反映其中一个变量所修改的结果。
变量并没有保存对象,保存的是指向对象的指针,通过指针访问并修改对象。