值与类型
一台标准的现代计算机的易失性数据存储设备中,会包含超过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的值 |
---|---|---|
Bollean | true | false |
String | 非空字符串 | ""(空字符串) |
Number | 非零数字值 | 0和NaN |
Object | 任何对象 | null |
undefined | n/a | undefined |
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值。