JavaScript的数据类型
一、基本数据类型
-
字符串(String):用于表示文本数据,可以使用单引号 ' ' 或双引号 " " 括起来。例如:"Hello" 、 'World' 。字符串的长度没有固定限制,但在某些浏览器中可能存在实际的限制。
-
数字(Number):JavaScript 只有一种数字类型,包括整数和浮点数。它采用 IEEE 754 格式表示数字,使用 64 位来存储。需要注意的是,浮点数的计算可能存在精度问题,例如 0.1 + 0.2!== 0.3 。常见的方法有 Number.isNaN() 用于判断是否为数值型的 NaN。另外还有一些特殊值,如 Number.MAX_VALUE 表示可表示的最大数字,Number.MIN_VALUE 表示可表示的最小数字,Number.POSITIVE_INFINITY 表示正无穷大,Number.NEGATIVE_INFINITY 表示负无穷大,Number.NaN 表示非数字值。
-
布尔(Boolean):只有两个值,即 true 和 false ,用于表示逻辑真和假。在 JavaScript 中,许多值都可以转换为布尔类型,除了 false 、空字符串 '' 、NaN 、undefined 、0 、-0 、+0 、null 会被转换为 false 外,其他值都会转换为 true 。
-
空值(Null):只有一个值 null ,表示一个变量中没有包含有效数据。它常被用于清空变量或表示一个空对象指针。虽然 typeof null 的结果是 "object" ,但这实际上是 JavaScript 最初实现的一个错误,不过已被 ECMAScript 沿用下来。从逻辑角度看,null 表示空值或空对象。可以通过给变量显式赋值为 null 来产生 null 值。
-
未定义(Undefined):当变量被声明但未初始化时,其值为 undefined 。这意味着使用 var 声明了变量但未进行赋值,或者访问对象不存在的属性或方法时,都会得到 undefined 。typeof 操作符对于未声明过和声明过未赋值的变量返回结果都是 'undefined' 。
-
符号(Symbol):ES6 引入的一种新的原始数据类型,表示独一无二的值。它通常用于防止对象属性名的冲突。
二、引用数据类型
-
对象(Object):是一种复杂的数据结构,可以存储多个键值对。对象的属性可以是各种数据类型,包括基本类型和其他对象。对象属性有数据属性(具有值)和访问器属性(通过 get 和 set 方法进行读写拦截)之分。创建对象可以使用对象直接量,即通过花括号 {} 来定义属性和值,例如:var person = {firstname: "john", lastname: "doe", id: 5566}; 。对象的属性可以通过点号 . 或方括号 [] 来访问和操作。
-
数组(Array):用于存储一组有序的数据,数组元素可以是不同类型。可以使用 [] 来创建数组,例如:var cars = ["saab", "volvo", "bmw"]; 。数组下标是基于零的,即第一个元素的下标是 0 ,第二个是 1 ,以此类推。数组具有许多方法,用于添加、删除、修改和访问数组元素等操作。
- 函数(Function):在 JavaScript 中,函数也是一种对象。它可以被定义和调用,用于封装可执行的代码块。函数可以有参数和返回值,并且可以拥有自己的属性和方法。函数的定义方式有函数声明和函数表达式等。
三、基本数据类型与引用数据类型的区别
基本数据类型和引用数据类型在存储、复制、传递、比较以及拥有的特性等方面都存在明显的区别。
-
存储方式:
- 基本数据类型的值直接存储在栈内存中,访问速度较快。
- 引用数据类型的值存储在堆内存中,在栈内存中存储的是指向堆内存中实际数据的引用(指针)。
-
复制方式:
- 对基本数据类型进行复制时,会创建一个完全独立的新值,修改其中一个不会影响另一个。
- 对引用数据类型进行复制时,复制的是引用(指针),而不是实际的数据。因此,修改一个引用数据类型的变量,会影响到其他指向相同数据的变量。
-
传递方式:
- 当基本数据类型作为参数传递给函数时,传递的是值的副本,函数内部对参数的修改不会影响到外部的原始值。
- 当引用数据类型作为参数传递给函数时,传递的是引用的副本,函数内部对参数的修改会影响到外部的原始对象。
-
比较方式:
- 对于基本数据类型,比较的是值本身是否相等。
- 对于引用数据类型,比较的是引用(指针)是否指向同一个对象。
-
属性和方法:
- 基本数据类型没有属性和方法。
- 引用数据类型可以拥有属性和方法。