值与类型

一台标准的现代计算机的易失性数据存储设备中,会包含超过300亿位的数据。为了能够顺利操作位数据又不引起数据丢失,我们将这些位划分为不同的信息块。在JavaScript中,我们称这些信息块为值。虽然所有值都是由位序列构成,但它们的功能会不一样,每个值的类型决定其功能的定义。

类型

类型是值的内部特征,它定义了值的行为,以使其区别于其他值。

JavaScript 有七种内置的值类型:

  • undefined(未定义)
  • boolean(布尔值)
  • string(字符串)
  • number(数字)
  • object(对象)
  • null (空值)
  • symbol(符号,ES6新增)

typeof

我们可以用typeof 运算符来查看值的类型,它返回的是类型字符串值,但七种类型并不是一一对应,特殊值null 会被认为是一个空的对象引用。

typeof undefined === "undefined"; 
typeof true      === "boolean";
typeof 42        === "number";
typeof "42"      === "string";
typeof {lift:42} === "object";
typeof Symbol()  === "symbol";
typeof null      === "object";

可以用以下方法判断null类型

var a = null;
(!a && typeof a === "object");

Boolean

布尔值指代真或假、开或关、是或否,只有2个值,保留字true和false。在ECMA中所有类型的值都有与这两个Boolean值等价的值,可以通过转换函数Boolean()来使用。

数据类型转为true的值转为false的值
Bolleantruefalse
String非空字符串""(空字符串)
Number非零数字值0和NaN
Object任何对象null
undefinedn/aundefined
var message = "Hello word";
var messageAsBollean = Bollean(message);

在流程控制语句中会自动执行相应的Boolean转换。

var message = "Hello word"
if(message){
    alert("Value is true");
}

undefined 与 null

特殊值 undefined 与 null 类型只有一个值,即其特殊值本身。它们各自表达其自身的含义不包含任何信息,未定义 和 空对象指针。

undefined

在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined。例如:

var message;
console.log(message === undefined) //true

在很多操作中,因为每个操作都必须返回一个值,而这个值没有定义返回值的时候,那么就是默认的undefined。例如:

function conl(a) {
    console.log(a)
}

在获取空对象的属性中,如果属性已经定义,会获取到返回的值,否则会返回undefined。例如:

var obj = {
    attr1:'attr1'
}

obj.attr1 // attr1
obj.attr2 // undefined

这个在以后会经常用到,在遍历时判断是否有数据展现页面的结构及类型。

null

从逻辑角度上来看,null值表示一个空对象指针。所以,如果定义变量准备在将来用保存对象,那么最好将该变量初始化为null而不是其他值。实际上,undefined值是派生自null值,因此在ECMA-262规定对它们的相等性测试要返回true

null == undefined //true

尽管 undefined 和 null 有这样的关系,但是它们的用途完全不同。如前所诉,无论在什么情况下都没有必要把一个变量的值显式地设置为undefined,而只要一再保存对象变量还没真正保存对象,就应该明确地让变量保存值为null值。