本文深入解析 JavaScript 中的数据类型,涵盖基本类型(String、Number、Boolean、Null、Undefined、Symbol)与引用类型(Object、Array、Function)。详细阐述栈内存与堆内存的存储机制,演示字符串、数字、布尔值的定义与转换,并重点讲解使用 typeof、Array.isArray 及 instanceof 进行类型判断的方法与注意事项。
一、基本数据类型(原始值类型)
JavaScript 的基本类型包括:字符串(String)、数字(Number)、布尔值(Boolean)、空值(Null)、未定义(Undefined)以及 Symbol。
在内存管理中,基本类型的变量通常存储在栈内存(Stack)中。栈内存保存的是变量的标识符以及指向实际数据位置的指针。
注:Symbol 是 ES6 标准引入的一种新的原始数据类型,主要用于表示独一无二的值,常用于对象属性的键名以避免冲突。
JavaScript 是一门动态类型语言,这意味着同一个变量可以在程序运行过程中被赋予不同类型的值。
var x; // x 为 undefined
var x = 5; // 现在 x 为数字
var x = "John"; // 现在 x 为字符1、字符串
字符串用于存储字符序列,例如文本内容 "Bill Gates"。
在 JavaScript 中,字符串可以用单引号或双引号包裹任意文本内容。
var carname="Volvo XC60";
var carname='Volvo XC60';若字符串内部需要使用与包裹符号相同的引号,可通过转义字符处理,或者交替使用单双引号来避免语法错误。
var answer="It's alright";
var answer="He is called 'Johnny'";
var answer='He is called "Johnny"';2、数字
JavaScript 中只有一种数字类型,它既可以表示整数,也可以表示带有小数点的浮点数。
var x1=34.00; //使用小数点来写
var x2=34; //不使用小数点来写对于极大或极小的数值,可以使用科学计数法(指数形式)进行书写,例如 123e5 表示 12300000。
var y=123e5; // 12300000
var z=123e-5; // 0.001233、布尔
布尔(Boolean)类型仅包含两个固定值:true 和 false。
var x=true;
var y=false;布尔值通常用于条件判断语句中,以控制程序的执行流程。
要将任意类型的值转换为布尔型,可以在该值前添加两个感叹号(!!)。例如,!!0 的结果为 false,而除 0、null、undefined、NaN、空字符串外的其他值转换结果均为 true。
4、undefined 和 null
当一个变量被声明但未赋值时,其默认值为 undefined,表示变量尚未包含任何值。
可以通过将变量显式赋值为 null 来清空该变量,表示“无对象”或“空引用”。需要注意的是,undefined 和 null 在代码中必须全小写。
cars=null;
person=null;虽然 undefined 与 null 在使用相等运算符(==)比较时值相等,但在使用严格相等运算符(===)比较时,由于类型不同,结果不相等。
typeof undefined // undefined
typeof null // object
null == undefined // true
null === undefined // false原始数据值(Primitive values)是指没有额外属性和方法的单一简单数据值。
使用 typeof 运算符可以检测并返回以下原始类型之一:
- string
- number
- boolean
- undefined
typeof "Bill" // 返回 "string"
typeof 3.14 // 返回 "number"
typeof true // 返回 "boolean"
typeof false // 返回 "boolean"
typeof x // 返回 "undefined" (假如 x 没有值)二、引用数据类型:
常见的引用数据类型包括对象(Object)、数组(Array)和函数(Function)。引用类型的值存储在堆内存(Heap)中,栈内存中仅保存指向堆内存中实际对象的指针。
1、数组
以下代码展示了如何创建一个名为 cars 的数组:
var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";或者使用紧凑写法 (condensed array) 创建数组:
var cars=new Array("Saab","Volvo","BMW");或者使用字面量语法 (literal array) 创建数组:
var cars=["Saab","Volvo","BMW"];若要创建空数组,可以使用 new Array() 或字面量 []。
var arr3 = new Array( );
var arr4 = [ ];JavaScript 数组的下标从 0 开始,因此第一个元素索引为 [0],第二个为 [1],依此类推。
您将在本教程稍后的章节中学到更多关于数组的知识。
2、 对象
对象由花括号 {} 分隔。在括号内部,对象的属性以“名称: 值”对的形式定义,各属性之间由逗号分隔。
var person={firstname:"John", lastname:"Doe", id:5566};上述示例中的对象 (person) 包含三个属性:firstname、lastname 以及 id。
JavaScript 对象声明中的空格和换行符不影响代码执行,因此声明可以跨越多行书写以提高可读性。
var person={
firstname : "John",
lastname : "Doe",
id : 5566
};也可以先创建一个空对象,随后动态追加属性和方法。
var people = new Object();
people.name = 'Tom';
people.age = 21;
people.eat = function(){ }访问对象属性主要有两种方式:点语法和方括号语法。
name=person.lastname;
name=person["lastname"];3、函数
var fn = function(){};
console.log(typeof(fn)); //'function'typeof 运算符对于函数类型会返回以下结果之一:
- 需要注意的是,typeof 运算符对于对象、数组或 null 均返回 "object"。
- 然而,typeof 运算符对于函数不会返回 "object",而是返回 "function"。
typeof {name:'Bill', age:62} // 返回 "object"
typeof [1,2,3,4] // 返回 "object" (并非 "array",参见下面的注释)
typeof null // 返回 "object"
typeof function myFunc(){} // 返回 "function"由于 typeof 运算符将数组返回为 "object"(因为在 JavaScript 中数组本质上是对象),若需准确判断一个对象是否为数组,可以使用以下两种方法:
1、使用 Array.isArray 方法:该方法从 IE9+ 开始得到支持,是判断数组的推荐方式。
var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";
// 判断是否支持该方法
if (Array.isArray) {
if(Array.isArray(cars)) {
document.write("该对象是一个数组。") ;
}
}2、使用 instanceof 操作符:通过检查原型链来判断对象是否为数组的实例。
var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";
if (cars instanceof Array) {
document.write("该对象是一个数组。") ;
}到此这篇关于JavaScript数据类型的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持本站。