ES变量中两种数据类型的值

**

ES变量中包含两种数据类型的值

**
基本数据类型值:指的是简单的数据段
引用数据类型值:指的可能由多个值构成的对象
注:将值赋给变量时,解析器必须确认值是哪种类型值

基本数据类型值:5种。Undefined、Null、Boolean、Number、String
引用数据类型值:8种。Object、Array、Date、RegExp、Function和三种特殊引用类型Boolean、Number和String。

两者区别

1.访问
2.保存&添加属性
3.复制变量值
4.传递参数
5.回收

1.访问
 5种基本数据类型是按值访问的,可以操作保存在变量中的实际值。
 引用类型的值是保存在内存中的对象,JS不允许直接访问内存中的位置。操作对象时,实际上在操作对象的引用。引用类型的值是按引用访问的

2.保存&添加属性
 基本类型的值存在栈内存
 引用类型的值存在堆内存   只能给引用类型值动态添加属性和方法

var person = new Object();
person.name = BTS;
alert(person.name);    //"BTS"

var name = "BTS";
name.age = 5;
alert(name.age);      //undefined


3.复制变量值
复制基本类型的值,在变量对象上创建一个新值,把该值复制到这个新变量。两变量可参与操作而不会互相影响。

复制引用类型的值,同样会复制值,但值得副本是一个指针,这个指针指向存储在堆中的一个对象。复制操作结束后,两变量将引用同一个对象,会相互影响。

4.传递参数
ES中所有函数的参数都按值传递。

向参数传递基本类型的值时,被传递的值会复制给一个局部变量。(命名参数,arguments对象中的一元素)

function addnum(num){
    num += 10;
    return num;
}
var count = 20;
var result = addnum(num);
alert(count);     //20,没有变化
alert(result);    //30

num与count互不认识,只是有了相同的值,若按引用传递的话,count也会变为30

向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,局部变量的变化反映在函数外部。

function setname(obj){
    obj.name = "BTS";
    obj = new Object();  //这个变量引用的是一个局部对象,这个局部对象在函数执行完后被销毁
    obj.name = "EXO";
}
var person = new Object();
setname(person);
alert(person.name);    //"BTS"

person是按值来传递的,如果不是,最后值应该是EXO。

5.回收
基本类型在当前执行环境结束后销毁。
引用类型不随执行环境结束而销毁,只当引用它的变量不存在时,这个对象才被垃圾回收机制回收。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值