最新的ECMAScript标准定义了7种数据类型:
- 基本数据类型:
Boolean
、Null
、Undefined
、Number
、String
、Symbol
(ES6新增) - 引用数据类型:
Object
原始值(primitive values)
除Object以外的所有类型都是不可改变的(值本身无法被改变)。
布尔类型
一个布尔值只有true
和false
两种值。Number
JavaScript不区分整数和浮点数。NaN
表示Not a Number,非数值;Infinity表示无穷。String
用于表示文本数据。它是一组16位的无符号整数值的“元素”。Null
null
,表示一个空的值。Undefined
一个没有被赋值的变量会有个默认的值undefined
。常用于判断函数的参数是否传递。Symbol
表示独一无二的值,不能通过new
命令来创建。Symbol
值不能与其他类型的值进行运算,会报错。可以显式转为字符串或布尔值,但不能转为数值。
对象 (Object)
在计算机科学中,对象是指内存中的可以被标识符
引用的一块区域。在JavaScript里,对象可以被看作是一组属性的集合。
-
数组
数组是一组按顺序排列的集合,集合的每个对象称为元素。数组可以包含任意数据类型。
typeof
typeof operand 或者 typeof (operand)
typeof
是一个操作符,其右侧跟一个表达式,可以是对象或者是原始值。常用于判断基本数据类型。其返还值是一个字符串。
typeof可以用于判断除null
以外的基本类型,同时也可以判断function
。
instanceof
object instanceof constructor
instanceof
用于判断构造函数的prototype
属性是否出现在对象的原型链中的任何位置。object
是要判别的对象,constructor
则是用于检测的构造函数。其返回值是布尔类型,true
或者false
。
//实现一个简单的instanceof
function instanceofFun(L,R){
let O = R.prototype;
L = L.__proto__;
while(true){
if(L === null){
return false;
}
if(O === L){
return true;
}
L = L.__proto__;
}
}
constructor
的prototype
属性值是有可能改变的,若改变后的值不在对象的原型链上,则原表达式的值也就发生了改变。同样若对象的__proto__
伪属性发生了变化也有可能导致原表达式的值得变化。
constructor
返回创建实例对象的Object
构造函数的引用。所有的对象都会从它的原型上继承一个constructor
属性。
toString
toString()
返会一个表示该对象的字符串。可以通过toString()
来获取每个对象的类型。
Object.prototype.toString.call(NaN+1); //[object Number]
Object.prototype.toString.call('a'+'b'); //[object String]
Object.prototype.toString.call(1 >= 2); //[object Boolean]
Object.prototype.toString.call(null); //[object Null]
Object.prototype.toString.call(undefined); //[object Undefined]
Object.prototype.toString.call(Symbol('a')); //[object Symbol]
Object.prototype.toString.call([1,2,3]); //[object Array]
Object.prototype.toString.call(new Date()); //[object Date]
Object.prototype.toString.call(Array); //[object Function]
Object.prototype.toString.call({a:1}); //[object Object]
Object.prototype.toString.call(new String('1')); //[object String]
Object.prototype.toString.call(document); //[object HTMLDocument]
Object.prototype.toString.call(window); //[object Window]