js 值类型和引用类型

今天来给大家介绍一下数据类型的另一种解读,值类型和引用类型(及简单类型和复合类型)

一、基本概念

  ECMAscript变量包括两种不同的数据类型的值,一种叫做简单类型(值类型),指的是简单的数据段,另一种叫做复合数据类型(引用类型),是由多个值构成的对象。

  在js的数据类型中,number,boolean,string,null和undefined都属于值类型,而函数和对象属于引用类型。

二、数据类型判断

  基本类型:typeof

  引用类型:instanceof

var a=10;
console.log(typeof a);
//number

var b=true;
console.log(typeof b);
//boolean

var arr=[];
console.log(arr instanceof Array);
//true

var obj={};
console.log(obj instanceof Object);
//true;

var fun=function(){
  var i=0;
  console.log(i);            
}
console.log(fun instanceof Function)
//true

三、存储机制

  基本数据类型:是存放于栈内存中,包括变量标识符和变量的值,基本数据类型复制后开辟的是新的内存,两个变量互不影响。

  引用类型:保存在堆内存中,是对地址的引用(及指针),所以变量复制后的两个变量指向的还是同一个对象,因此对其中一个进行操作,另一个结果也会受到影响。

  先给大家举点例子吧

var num1=10;
var num2=num1;
num2-=2;
console.log(num1,num2);
//10,8

var arr1=[1,2,3];
var arr2=arr1;
arr2.push(4);
console.log(arr1,arr2);
//[1,2,3,4],[1,2,3,4]

var person1={
name:'zhangsan',
age:20
}
var person2=person1;
person2.name='lisi';
console.log(arr1,arr2);
//{name:'lisi',age:20},{name:'lisi',age:20}

四、创建对象实例的方法

  1,使用new操作符后跟Object构造函数

  2,字面量

  

var obj=new Object();//
var obj2={};
console.log(obj,obj2);
//{},{}     console.log(obj==obj2)  false  堆内存,不同地址
/获取
//以及点表示法和方括号表示法
var person1={
name:'zhangsan',
age:20
}
console.log(person1.name)//zhangsan
console.log(person1['name'])//zhangsan

  ps:点表示法和方括号表示法的区别

  1,能用点表示法标识的一定可以用方括号表示,但能用方括号表示的,不一定能用点表示

  2,方括号表示法可以用变量名做属性名,点表示法不能

  3,方括号可以用纯数字表示属性,点表示法不能

  4,方括号表示法可以用js的关键字和保留字作为属性,点表示法不能

  此处我就不向大家要一一举例啦,这里还是很好理解的,总之就是方括号表示法的功能强于点表示法,但是一般我们用点表示法注意下特殊的就好了。

作者:epines
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/epines/p/9131305.html