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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Silam Lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值