JavaScript数据类型详解

293 阅读3分钟
  1. 最新的 ECMAScript 标准定义了 7 种数据类型:
  • 6 种原始类型:
  • Boolean
  • null
  • Undefined
  • Number
  • String
  • Symbol(ECMAScript 6 新定义,符号类型)
  • 和 Object
2. 简单了解到JavaScript的7种数据类型,下面我们来详细介绍下Object数据类型。
在JavaScript语言中,所有的类最底层的原型链都会指向Object的原型。因此基本上所有的类都继承了Object原型方法。也得此原因Object数据类型又可以分解如下。
3. 以上详细列举了JavaScript中的Object数据类型。那么顺便来谈一谈引用类型。什么是引用类型啦,它又有什么作用呢。
在JavaScript语言中,传参的方式又两种:
  • ①传值 : 将a参数的值传给b参数,b改变 a并不发生改变 (总结:所有的原始类型都是传值)
  • ②引用:将a参数的地址传给b参数引用,这是b改变数据里面的内容,a也发生改变(总结:所有的Object类型都是引用)
//基础类型数据
var a = 'zhangxiao',
    b = 123,
    c = true;

//Object类型数据
var d = {name:"zhangxiao",age:27,isMarry:false},
    d1 = [d];//将d放入d1数组中
console.log(d, '\n', d1, '\n', d2);
// {name:"zhangxiao", age:27, isMarry:false}
// [{name:"zhangxiao", age:27, isMarry:false}]
//修改基础类型数据
var e = a,
    f = b,
    g = c;
e = 'zx',
f = 321, 
g=false;
console.log(a, b, c, '----', e, f, g);
// 'zhangxiao', 123, true, ----, 'zx', 321, false
//修改Object类型数据
var h = d,
    d2 = d1.concat(); //浅复制d1数组
h['isMarry'] = true;
d2[0]['name'] = 'zx';
//引用类型的数据改变,其所有指向引用的数据均改变,基础类型改变,并不引起其他原始数据改变
console.log(h, '\n', d, '\n', d1, '\n', d2, '\n', d1===d2, '\n', d1[0]===d2[0]);
// {name:"zx",age:27,isMarry:true}
// {name:"zx",age:27,isMarry:true}
// [{name:"zx",age:27,isMarry:true}]
// [{name:"zx",age:27,isMarry:true}]
// false  /** 因为d2是有d1数组连接生成的新数组,等同于浅拷贝,故d1和d2是两个不同数组 */
// true   /** 因为d2是d1浅拷贝,而d1中的元素是Object类型,故d2的元素是引用的d1元素也因此是同一元素 */
那么看到以上的引用过后是不是会想到它有什么用呢,怎么用它!
在此我在给大家举个例子,Vue是当前用的比较火的一个框架,想必大家一定遇到过父子组件间通信的问题,除了运用Vue提供的 $emit,还可以运用上述所说的引用方式通信。子组件修改数据,父组件也跟随修改,因为子组件的数据是通过引用方式获得。这样的通信高效简洁,Vue官方也很是推荐。当然它的用途不仅体现如此,还比如函数传参,如a函数想修改b函数的变量,这时运用引用也是很恰当的。