大致介绍
ECMAScript中有5中简单的数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number、String。
Undefined
Undefined时全局变量的一个属性,它只有一个值即:undefined。当使用var声明变量但未对其初始化时,这个变量的值就是undefined。
var test;
console.log(test); //undefined
对于未声明过的变量只能进行一种操作,即typeof检测其数据类型
//var a
console.log(typeof a); //undefined
undefined通常出现的场景:
JavaScript中的基本类型值是ECMAScript语言规范中的核心概念,它们包括Undefined、Null、Boolean、Number和String五种。这些类型被认为是简单数据类型,因为它们的值直接存储在栈内存中,而不是像复杂数据类型(如Object)那样存储在堆内存中通过引用访问。
**Undefined** 是一个特殊的值,它代表了未定义或者未赋值的状态。当声明了一个变量但没有初始化时,该变量的值就是undefined。例如:
```javascript
var test;
console.log(test); // 输出 "undefined"
```
另外,尝试访问未声明的变量,使用`typeof`操作符会返回"undefined":
```javascript
//var a
console.log(typeof a); // 输出 "undefined"
```
在JavaScript中,undefined通常出现在以下几个场景:
1. 已声明但未赋值的变量。
2. `typeof`检测未声明的变量。
3. 没有返回值的函数的执行结果。
4. 函数没有传入参数。
5. 使用`void`操作符,如`void(0)`,其结果也是`undefined`。
**严格相等运算符** (`===`) 可以用来判断一个变量是否为undefined,而不能使用相等运算符 (`==`),因为`null == undefined`为`true`,这可能会导致误判。例如:
```javascript
var x;
if (x === undefined) {
console.log(1);
} else {
console.log(2);
}
```
同时,`void`操作符可以用来生成undefined值,如`void(0)`。
**Null** 类型也是只有一个值的数据类型,这个值就是null。null通常用来表示预期一个对象,但实际上没有引用任何对象的情况。例如,尝试获取不存在的DOM元素时,`document.getElementById('nonexistent')`会返回`null`。尽管`typeof null`返回"object",这是历史遗留问题,实际上null并不属于Object类型。null和undefined在逻辑上有所不同,它们虽然都表示空值,但null表示的是“空值”,而undefined表示“未定义”。比较这两个值时:
```javascript
null === undefined // false
null == undefined // true
null === null // true
null == null // true
```
**Boolean** 类型是JavaScript中最常用的数据类型之一,它有两个字面量值:true和false。Boolean类型的值在其他类型之间可以进行转换。例如,非空字符串、非零数字、非NaN值会被转换成true,反之则转换成false。可以使用`Boolean()`转换函数来强制转换值的布尔表示:
```javascript
var message = 'hello world';
var messageBoolean = Boolean(message);
console.log(messageBoolean); // 输出 "true"
```
以下是一些常见的转换规则:
- `undefined` 转换为 false
- `"undefined"` 转换为 false
- `NaN` 转换为 false
- `null` 转换为 false
- `0` 转换为 false
- `-0` 转换为 false
- `true` 转换为 true
- `1.2` 转换为 true
- `"false"` 转换为 true(非空字符串)
- `"0"` 转换为 false(非数字字符串)
- `"1.2"` 转换为 true(非空字符串且看起来像数字)
- `"o"` 转换为 false(非空字符串且非数字)
- `""`(空字符串) 转换为 false
- `Infinity` 转换为 true
- `-Infinity` 转换为 true
理解JavaScript的基本数据类型及其特性对于编写健壮的代码至关重要,这些基础知识构成了JavaScript编程的基础。