变量那些事~

大家都知道,在JS中将数据类型分类的话,会分为number,string,boolean,null,undefined和object。其中前五种属于基本类型,object属于复杂类型。但是这并不是我想讲的,今天我想和大家探讨一个问题:使用typeof能得到哪些类型?一拿到问题,可能很多人脑海中的第一反应是答案,但我们实际应该看到和想到的是知识点。
首先,按照变量的存储类型可以分为值类型和引用类型。举个例子:

var a = 1;
var b = a;
console.log(a, b);    // 1,1
a = 2;
console.log(a, b);    // 2,1

在复制时是从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新值分配的位置上,所以他们是互不影响的。

var a = {age : 20};
var b = a;
console.log(b.age);      // 20
a.age = 21;
console.log(b.age);      // 21

当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份放到为新变量分配的空间中,不同的是,这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象。复制操作 结束后,两个变量实际上将引用同一个对象。因此改变其中一个变量,就会影响另一个变量。
那么问题来了,引用类型存在的意义是什么呢?
这是因为值类型在复制时存的是相应的值,值占用的内存不大,引用类型在复制时如果也存值,会占用很大的内存,通常都是好几块共用一块内存空间,所以引用类型是为了让内存共用。
回到我们最开始的问题,这里typeof只能区分值类型的详细类型,例如:

typeof  undefined     // undefined
typeof  123           // number
typeof  "abc"         // undefined
typeof  true          // boolean

可能你会疑惑null呢,我们继续看

typeof  null             // object
typeof  []               // object
typeof  {}               // object
typeof  console.log      // function

在引用类型中,typeof只能区分function,其他的得到的值都是object;其中null也是引用类型,仅仅是一个空指针。这两点比较特殊。

总结

① 值类型包括:undefined,number,string,boolean;
引用类型包括:null,array,object,function
② typeof 可以得到的类型有:undefined,number,string,boolean,object,function

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,896评论 18 399
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,668评论 0 13
  •   按照 ECMA-262 的定义,JavaScript 的变量与其他语言的变量有很大区别。   JavaScri...
    霜天晓阅读 2,920评论 0 0
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,426评论 11 349
  • 你用汗水浇灌混凝土 永远承载着执着与希望 通往远方的家 没有畏惧你的身影 又一次次握起那一道道驿动的铁锤 挥洒着雨...
    米澜盛若阅读 1,761评论 0 2