JavaScript_笔记5 基本类型值和引用类型值(保存、复制、按值传递)

JavaScript_笔记5 基本类型值和引用类型值(保存、复制、按值传递)

保存

基本数据类型有Undefined、Null、Boolean、Number、String五种,是按值访问基本类型值;引用类型的值是保存在对象Object中的,是按引用访问的。
对于引用类型的值,可以为其添加属性和方法,也可以改变或删除其属性和方法。

var person = new Object();
person.name = 'Kabukiyo';
alert(person.name);

var操作符创建了一个变量person,并保存了一个值,这个值是引用类型的值,保存了一个对象。

复制

基本类型值的复制

var num1 = 5;
var num2 = num1;

num1和num2都保存了值5,但这两个值是完全独立,互不影响的。

引用类型值的复制

var person1 = new Object();
var person2 = person1;
person2.name = 'kabukiyo';
alert(person1.name); //'kabukiyo'

var定义了两个变量person1,person2。创建一个对象并保存在变量person1中,之后用person1复制person2。
使得person1,person2都保存了这个对象,即这两个变量都引用同一个对象。

传递

ECMAScript所有函数的参数都是按值传递的。即把函数外部的值传到函数内部,是直接复制给函数内部参数。
函数传参的区别:

  1. 按值传递:在函数里面改变传递的值不会影响到外面
  2. 按引用传递:在函数里面改变传递的值会影响到外面

举例一、

var num1 = 1;
function change(num){
    
    
	console.log(num);  //1
	num=2;
	console.log(num);  //2
}
change(num1);
console.log(num1); // 1 

这个例子说明:

  1. 实参num1传值给形参num,故第三行输出1,相当于复制
  2. 第四行改变了num的值,但不影响num1的值
  3. 按值传递,函数里面改变传递的值不会影响到外面

举例二、

        function test(obj){
    
    
            alert(obj.name);  // kabukiyo
        }
        var person = new Object();
        person.name = 'kabukiyo';
        test(person);

上例:var定义一个变量person并保存一个对象,为person添加属性name,并为其属性赋值为‘kabukiyo’。之后person作为参数传递到函数内部,obj和person引用同一个对象。

        function test(obj){
    
    
            obj.name = 'Lin';
            // alert(obj.name); //Lin
        }
        var person = new Object();
        person.name = 'kabukiyo';
        test(person);
        //alert(person.name);//外部也变成了Lin

由于obj和person引用的是同一个对象,所以内部对属性name作修改,外部也能有所体现。但它仍然不是按引用传递的。

        function test(obj){
    
    
            obj.name = 'Lin';
            obj = new Object();
            obj.name = 'ahua';
            // alert(obj.name); // ahua
        }
        var person = new Object();
        person.name = 'kabukiyo'; 
        test(person);
        alert(person.name)  //Lin。并没有变成ahua

如果是按引用传递,执行语句 obj = new Object();person应该也会受影响。但并没有。
也就像

function example(num){
    
    
	alert(num);  // 1
	num = 2      // 改变了num
}
var num1 = 1;
example(num1);
alert(num1);    //还是1,不会因为 num = 2;而num1 变成了2;

猜你喜欢

转载自blog.csdn.net/qq_43263320/article/details/113566431