基本类型和引用类型

ECMAScript 变量包含两种不同的数据类型:基本类型和引用类型
基本类型:String、Number、Boolean、Undefined、Null
引用类型:Object
(补充:判断一个变量是否为null,直接用===来判断就可以了)

下面来谈一下两者的一些区别:

获取数据类型

使用typeof获取数据类型,返回值为字符串类型

//基本类型
var mag = "strings";
var age;
console.log(typeof mag);     //“string”
console.log(typeof age);     //"undefined
console.log(typeof 5);       //"number"
//引用类型
var person = {
	name:"Jack”,
	age:18
};
console.log(typeof person);    //"object"

注意:
使用typeof判断null的数据类型时会返回“object”,但是并不代表null就是Object类型的值,这只是历史遗留的问题,现在使用null作为对象的占位符。

两种类型赋值时的区别

基本类型存储的是数据本身的变量是值类型的数据。值类型复制数据是直接将存储的数据复制一份进行赋值,两份数据在内存中是完全独立的,互不影响。

var str = "lalala";
var str1 = str;
str = "lvelvelve";
console.log(str);	//lvelvelve
console.log(str1);	//lalala

而引用类型存储的是数据在内存中的地址,即数据在内存中单独存储。赋值的时候,是将变量中存储的地址复制一份单独存储。但是两个变量不独立,修改其中那个对象时,另外一个引用对象来访问时,也会访问到修改后的值。

var p1 = {
    name:"xxx",
    type:430
}
var p2 = p1;
p1.name = "111";
p1.type = 100;

console.log(p1);	//{name:"111",type:100}
console.log(p2);	//{name:"111",type:100}

两种数据在函数中的使用

在探讨这个问题之前,需要对下面两个概念有比较清楚的认识:
实参:函数调用的时候,实际传入的参数
形参:函数声明的时候,用来占位的变量名,没有实际的数据
注意
函数调用的时候,会默认地将实参赋值给形参。

简单类型做函数的参数:

函数内部的变量,也就是形参和实参只是简单的赋值操作,两份数据独立存储于内存,在函数内部对该对象进行修改,不会影响到外面的变量。下面来看一个例子:

var num = 10;
function changeNumber(num1) {
     num1 = 100;
     console.log(num1); //100
 }
 changeNumber(num);
 console.log(num);  //10
引用类型做函数的参数

在该过程中,还是将实参存储的地址赋值给了形参。在函数内部,形参同样指向该对象,所以在函数内部对该对象进行修改,会影响到外面的变量。

var obj = {
    name : "aaa"
};
function jinhua(param){
    param.name = "bbb";
}
jinhua(obj);
console.log(obj.name); //bbb

注意:
如果在函数内部重新创建对象,并为该形参赋值,那么两个对象不会再有联系,修改其中一个对象,另外一个将不会被影响。

var obj = {
    name : "xxx"
};
function jinhua(param){
    param.name = "bbb";
    //下面的这句代码,重新创建了一个对象,修改了param的指向
    //但是,obj还指向原来的那个对象 所以,在修改param的时候,修改的是
    //新创建的对象,跟obj没有关系
    param = {
        name:"yyy"
    };
    param.name = "xxx";
}
jinhua(obj);
console.log(obj.name);  //bbb
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值