JavaScript数据类型与数据结构

数据类型

什么是数据类型?
数据类型(Data type)是用来约束数据的解释
JavaScript语言可以识别下面 7 种不同类型的值:
6 种 基本数据类型(也叫原始类型):

Boolean
Null
Undefined
Number
String
Symbol (ECMAScript 6 新定义)–符号类型

基本类型的变量是存放在栈内存(Stack)里的
但是为什么有人说js里面一切皆为对象呢? 三种原始类型的值——数值、字符串、布尔值——在一定条件下,也会自动转为对象,也就是原始类型的“包装对象”

1 种 引用类型:

Object

Object又分为以下几种类型:

  • Function
  • Array
  • Date
  • RegExp
  • Error(ReferenceError同作用域判别失败相关,而TypeError对结果的操作是非法或不合理的)

引用类型的值是保存在堆内存(Heap)中的对象(Object)
与其他编程语言不同,JavaScript 不能直接操作对象的内存空间(堆内存)。

到目前为止,我们看到的大多数引用类型值都是 Object 类型的实例;而且,Object 也是 ECMAScript 中使用最多的一个类型。虽然 Object 的实例不具备多少功能,但对于在应用程序中存储和传输数据而言,它们确实是非常理想的选择。——《JavaScript高级程序设计(第3版)》

参考js的数据类型 ECMAScript Language Types

数据结构

什么是数据结构?
数据结构(英语:data structure)是计算机中存储、组织数据的方式。
数据结构可透过程序语言所提供的数据类型、引用及其他操作加以实现
常见的数据结构有数组,堆栈,队列,链表,数,图,堆,散列表.

基于原型链继承上讲,Javascript 只有一种结构,那就是:对象。

常用的判断数据类型的方法

typeof操作符返回一个字符串,指示未经计算的操作数的类型。
typeof会把null ,[] 都判断为object
instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上
instanceof会把 []判断为object
Object.prototype.toString.call() 来获取每个对象的类型
经过测试 Object.prototype.toString.call获取类型最为准确,

补充看到的一个笔试题

1
var  obj={push:Array.prototype.push,length:4}; obj.push('a');  obj.length

问length是多少? 5; obj是什么类型? object
类似问题还有

1
2
3
4
var associative_array = new Array();
associative_array["one"] = "Lorem";
associative_array["two"] = "Ipsum";
associative_array["three"] = "dolor";

associative_array 的length 是多少? 0 ; associative_array是什么类型? Array.