JavaScript 数据类型


JavaScript是一种动态类型语言。JavaScript的值(value)有类型,变量没有类型。


数据类型

JavaScript有下面几种数据类型:

  • boolean:布尔型,只有两种值true和false。
  • number:数字,所有数字都使用浮点数表示,不区分整数和浮点数。
  • string:字符串。
  • object:对象,数组、日期、正则表达式都是对象类型,函数(function)也是一种特殊的对象。
  • undefined:表示变量未定义或初始化,即没有给变量赋值,只有一种值undefined。
  • null:表示空值,只有一种值null。

下面是内置数据类型的例子:

<!DOCTYPE html><html><body><pre>
<script type="text/javascript">
  document.writeln("typeof true : " + (typeof true)); // boolean
  document.writeln("typeof 1 : " + (typeof 1));       // number
  document.writeln("typeof \"1\" : " + (typeof "1")); // string

  document.writeln("typeof parseInt : " + (typeof parseInt)); // function
  document.writeln("typeof [1, 2] : " + (typeof [1, 2]));     // object
  document.writeln("typeof Date : " + (typeof new Date()));   // object
  document.writeln("typeof /ab/g : " + (typeof /ab/g));       // object

  document.writeln("typeof null : " + (typeof null)); // object
  var a;
  document.writeln("typeof a : " + (typeof a));   // undefined
  document.writeln("typeof b : " + (typeof b));   // undefined
</script>
</pre></body></html>

typeof null的值应该是null,但实际是object,这是一个一直存在的bug。

函数的类型是function,而不是object。数组的类型是object。

undefined和null

undefined表示变量没有定义或没有初始化,即没有给变量赋值。

有两种方式将变量表示为undefined:

  • var x;
  • var y = undefined;

null表示变量值为null(null值的类型为null类型)。例如 var x = null;

下面是undefined和null的区别:

undefined在数字环境时会被转换成NaN,null会被转换成0。

下面是undefined和null的例子:

<!DOCTYPE html><html><body><pre>
<script type="text/javascript">
  document.writeln("1 + undefined : " + (1 + undefined)); // NaN
  document.writeln("1 + null: " + (1 + null));  // 1

  document.writeln("undefined == null : " + (undefined == null));   // true
  document.writeln("undefined === null : " + (undefined === null)); // false

  var x;
  document.writeln("typeof x : " + (typeof x)); // undefined
  var y = undefined;
  document.writeln("typeof y : " + (typeof y)); // undefined
</script>
</pre></body></html>

布尔值

JavaScript是弱类型语言,根据需要,例如进行条件判断时,其它类型可以转换成布尔型。

在条件语句中,下面几种值会被计算成false:

  • false
  • 数字0
  • NaN,Not a Number,特殊值,表示不是数字
  • 空字符串("")
  • null,变量值为null
  • undefined,变量没有赋值

所有其它值,包含所有对象,会计算成true。

下面是布尔值的例子:

<!DOCTYPE html><html><body><pre>
<script type="text/javascript">
  document.writeln("!0 : " + (!0));     // true
  document.writeln("!NaN : " + (!NaN)); // true
  document.writeln("!\"\" : " + (!"")); // true
  document.writeln("!undefined : " + (!undefined)); // true
  document.writeln("!0 : " + (!0)); // true
</script>
</pre></body></html>