基本类型:Number,String,Boolean,Null,undefined。
引用类型:Object,Array,Date,RegExp,Function
Object
本质上是由一组无序的名值对组成的。
ECMAScript
中用var
关键字来定义变量,因为js
是弱类型的,所以无法确定变量一定会存储什么值,也就不知道变量到底会是什么类型,而且变量的类型可以随时改变。
这就是ECMAScript
是松散类型的来由,所谓松散类型就是可以用来保存任何类型的数据。
es6
中新增了let
命令来声明变量、const
命令声明一个只读的常量。let
的用法类似于var
,但是所声明的变量,只在let
命令所在的代码块内有效。const
一旦声明,常量的值就不能改变。
typeof 操作符
由于js
中的变量是松散类型的,所以它提供了一种检测当前变量的数据类型的方法,也就是typeof关键字.
通过typeof
关键字,对这5种数据类型会返回下面的值(以字符串形式显示)undefined
---------- 如果值未定义 Undefined
boolean
---------- 如果这个值是布尔值 Boolean
string
---------- 如果这个值是字符串 String
number
---------- 如果这个值是数值类型 Number
object
---------- 如果这个值是对象或null
Object
需要注意的是typeof null
返回为object
,因为特殊值null
被认为是一个空的对象引用。
-
alert( typeof null); // "object"
-
alert( typeof function () {
-
return 1;
-
}); // "function"
-
alert( typeof '梦龙小站'); // "string"
-
alert( typeof 1); // "number"
-
alert( typeof a); // "undefined"
-
alert( typeof undefined); // "undefined"
-
alert( typeof []); // "object"
Undefined
null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。
Undefined
类型只有一个值,即特殊的undefined
。在使用var
声明变量但未对其加以初始化时,这个变量的值就是undefined
。不过,一般建议尽量给变量初始化,但是在早期的js
版本中是没有规定undefined
这个值的,所以在有些框架中为了兼容旧版浏览器,会给window
对象添加undefined
值。
window['undefined'] = window['undefined']; //或者 window.undefined = window.undefined;
Null
Null
类型是第二个只有一个值的数据类型,这个特殊的值是null
。从逻辑角度来看,null
值表示一个空对象指针,而这也正是使用typeof
操作符检测null
时会返回object
的原因。
var car = null; console.log(typeof car); // "object"
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null
而不是其他值。这样一来,只要直接检测null
值就可以知道相应的变量是否已经保存了一个对象的引用了。
例如:
if(car != null){ //对car对象执行某些操作 }
实际上,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true。
console.log(undefined == null); //true
尽管null和undefined有这样的关系,但它们的用途完全不同。无论在什么情况下都没有必要把一个变量的值显式地设置为undefined,可是同样的规则对null却不适用。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。这样做不仅可以体现null作为空对象指针的惯例,而且也有助于进一步区分null和undefined。