本文详细解析JavaScript中的值类型,区分Primitive(基本类型)与Object(对象)。涵盖5种基本类型及对象的不可变性特征,并通过typeof操作符验证各类值的类型返回结果,重点说明null返回object的历史遗留问题及函数类型的特殊性。
JavaScript值类型概述
计算机程序的运行核心在于对各类信息(值)的操作与读写。在JavaScript中,值被划分为两大类别:Primitive(基本类型)和Object(对象)。
Primitive(基本类型)详解
Primitive(基本类型)
JavaScript定义了5种Primitive类型:
1. Number:涵盖所有数字,包括整数和小数。 2. String:字符串类型。 3. Boolean:布尔类型,仅包含true或false。 4. null:该类型仅包含null一个值。 5. undefined:该类型仅包含undefined一个值。
Object(对象)类型解析
Object(对象)
除Primitive之外的所有值均属于Object(对象)。常见的Object类型包括:
1. JSON键值对对象:例如{“name”:”Bob”, “age”:42}。 2. 数组(array):例如[1,4,5,7,9]。 3. 函数(function):例如function(){return true;}。在JavaScript中,函数具有双重身份:既是可执行代码块,也是类(Class)的构造器(constructor)。无论以何种形式存在,函数始终被视为对象。
JS内置全局对象
JS内置全局对象
为简化编程,JavaScript提供了内置的全局对象,该对象包含以下7个成员变量,且类型均为Object:
1. Math:提供一系列复杂数学运算的方法。 2. Number:通过访问其成员变量获取特殊数值。 3. Array:数组对象的构造函数。 4. Function:函数对象的构造函数。 5. Date:日期对象的构造函数。 6. RegExp:正则表达式对象的构造函数。 7. Error:错误对象的构造函数。
在编程时,由于可以直接访问上述7个变量,因此它们常被当作全局对象直接使用。
Immutable与Mutable特性
Immutable(不可变)与Mutable(可变)
Primitive与Object之间存在显著差异:所有Primitive都是Immutable(不可变的),而所有Object都是Mutable(可变的)。以String为例,调用其编辑方法后,JavaScript会将结果存储在一个新的String对象中,原始String对象保持不变:
代码如下:
var s = "test";
s.toUpperCase();//返回一个新的String对象 "TEST"
console.log(s);//"test" -- 原始String s未改变
typeof操作符实验验证
实验验证
在JavaScript中,可以使用typeof操作符来获取值的类型。
获取数字类型:
代码如下:
var n = 42;
console.log(typeof n);程序输出结果为number。
获取字符串类型:
代码如下:
var s = "test";
console.log(typeof s);程序输出结果为string。
获取布尔值类型:
代码如下:
var b = true;
console.log(typeof b);程序输出结果为boolean。
获取null类型:
代码如下:
var x = null;
console.log(typeof x);理论上应输出null,但实际输出object。这是因为typeof null返回object是JavaScript自首个版本起存在的bug。在ECMAScript标准制定过程中,曾就修复此bug展开讨论:http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null;最终决定不修复,因为修复可能导致大量现有网站出现问题。
获取undefined类型:
代码如下:
var y = undefined;
console.log(typeof y);程序输出结果为undefined。
获取JSON对象类型:
代码如下:
var j = {"name":"Bob", "age":42};
console.log(typeof j);程序输出结果为object。
获取数组对象类型:
代码如下:
var a = [2,3,5,7,11];
console.log(typeof a);程序输出结果为object。
获取函数对象类型:
代码如下:
var f = function(){return true;};
console.log(typeof f);函数对象较为特殊,typeof操作符返回结果为function。