ECMAScript中有5种简单数据类型(也称为基本数据类型):
Undefined、Null、Boolean、Number和String。
还有1种复杂数据类型——Object, Object本质上是由一组无序的名值对组成的.
3.4.1 (typeof) 操作符,来检测给定变量的数据类型
var age = 18; // number
age1 = '18'; // string
age2 = true; // boolean
age5 = null; // object
var num; // undefinded
age6 = test; // 这个值是函数 返回的类型是function
console.log(typeof age6);
function test() { // 有名函数
/**
* "undefined"——如果这个值未定义;
* ❏ "boolean"——如果这个值是布尔值;
* ❏ "string"——如果这个值是字符串;
* ❏ "number"——如果这个值是数值;
* ❏ "object"——如果这个值是对象或null;
* ❏ "function"——如果这个值是函数。
*
*/
}
3.4.2 undefined类型
Undefined类型只有一个值,即特殊的undefined。
在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined,例如
var message; // 声明了未赋值,返回的值是undefinded;
console.log(message == undefinded) // true
// 上面这个例子只声明了变量message,但未对其进行初始化。
// 比较这个变量与undefined字面量,结果表明它们是相等的
console.log(typeof hhh); // 没有被声明但返回的值也是undefinded
console.log(hhh); // 没有声明的变量一调用会直接报错,声明了没有被赋值的变量一调用会返回undefinded
var kij;
console.log(kij); // 返回undefinded;
3.4.3 Null类型
Null类型是第二个只有一个值的数据类型,这个特殊的值是null
从逻辑角度来看,null值表示一个空对象指针,
而这也正是使用typeof操作符检测null值时会返回"object"的原因
var car = null;
console.log(typeof car); // object
/**
* 如果定义的变量准备在将来用于保存对象,
* 那么最好将该变量初始化为null而不是其他值。
* 这样一来,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用,
* 如下面的例子所示
*/
if (car !== null) {
car = car + 1
console.log(car)
} // 如果可以执行就说明保存了一个对象的引用,否则没有。
3.4.4 Boolean类型
Boolean类型是ECMAScript中使用得最多的一种类型,
该类型只有两个字面值:true和false。
这两个值与数字值不是一回事,因此true不一定等于1,而false也不一定等于0
// 虽然Boolean类型的字面值只有两个,
//但ECMAScript中所有类型的值都有与这两个Boolean值等价的值。
// 要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean(),
// 如下例所示:
var xue = 'Hello world';
var xueAsBoolean = Boolean(xue);
console.log(xueAsBoolean); // 会返回true;
/**
* 在这个例子中,字符串message被转换成了一个Boolean值,
* 该值被保存在messageAsBoolean变量中。
* 可以对任何数据类型的值调用Boolean()函数,而且总会返回一个Boolean值。
* 至于返回的这个值是true还是false,
* 取决于要转换值的数据类型及其实际值,
*/
var xiao = 0; // false;
xiao = '0'; // true;
xiao = 123; // true;
xiao = NaN; // false;
xiao = ''; // false;
xiao = null; // false;
xiao = true; // true;
xiao = false; // false;
if (xiao) {
console.log(true);
} else {
console.log(false);
}
// 这些转换规则对理解流控制语句(如if语句)自动执行相应的Boolean转换非常重要