数据类型
什么是数据类型?数据类型
(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 | var associative_array = new Array(); |
associative_array 的length 是多少? 0 ; associative_array是什么类型? Array.