JavaScript的类型可以分为两个主要组别:原始类型和对象类型。JavaScript的原始类型包括数字、文本字符串(简称为字符串)和布尔值(也称为布尔值)。
特殊值null
和undefined
也是原始值,但它们不是数字、字符串或布尔值。这两个值通常被视为各自类型的独特成员。ES6引入了另一种特殊类型,称为Symbol
,用于语言扩展而不破坏向后兼容性。
在JavaScript中,除了数字、字符串、布尔值、Symbol
、null
和undefined
之外的任何值都是对象。对象是对象类型的成员,它们是属性的集合,每个属性都有一个名称和一个值(可以是原始值或另一个对象)。还有一个非常特殊的对象,称为全局对象。
(程序员的软技能:ke.qq.com/course/6034346)
常规JavaScript对象是无序的命名值的集合。语言本身还定义了一种特殊的对象,称为数组。数组表示有序的数值集合。JavaScript包括用于操作数组的特殊语法,数组本身展现出与常规对象不同的行为。
除了基本对象和数组之外,JavaScript还定义了其他几种有用的对象类型。Set
对象表示值的集合,而Map
对象表示键值映射。各种“类型化数组”类型便于对字节数组和其他二进制数据进行操作。RegExp
类型表示文本模式,并在字符串上支持复杂的匹配、搜索和替换操作。Date
类型表示日期和时间,支持基本日期计算。Error
类型及其子类表示在JavaScript代码执行过程中可能发生的错误。
将JavaScript与静态语言区分开的是,函数和类不仅仅是语法,它们本身是可以由JavaScript程序操作的值。与JavaScript中的其他非原始值一样,函数和类也是特殊类型的对象。
在内存管理方面,JavaScript解释器执行自动垃圾回收。这意味着JavaScript程序员通常不需要关心对象或其他值的销毁和释放。当一个值变得不可访问,或者不再被程序引用,解释器知道它不再需要,并自动释放它占用的内存(尽管JavaScript程序员有时应该谨慎,以防止值比预期的持续时间更长,变得无法回收)。
JavaScript支持面向对象的编程风格。实质上,这意味着不要为不同类型的值定义全局函数,而是让这些类型定义操作值本身的方法。例如,要对数组的元素进行排序,您不需要将数组传递给sort()
函数;相反,您可以在数组a
上调用sort()
方法:
// 面向对象版本的sort(a) a.sort()
从技术角度来看,只有JavaScript对象具有方法。但是,数字、字符串、布尔值和符号似乎也有方法。在JavaScript中,只有null
和undefined
不能调用方法。
JavaScript的对象类型是可变的,而其原始类型是不可变的。可变类型可以更改;例如,JavaScript程序可以修改对象的属性和数组元素。数字、布尔值、符号、null
和undefined
是不可变的。例如,修改数字没有意义。字符串可以被视为字符数组,您可能期望它们是可变的。但是,在JavaScript中,字符串也是不可变的。虽然您可以使用索引访问字符串中的字符,但JavaScript不提供修改字符串中现有字符的方法。
JavaScript自由地转换不同类型的值。例如,如果程序期望一个字符串,但您提供了一个数字,数字将自动转换为字符串。同样,如果在期望布尔值的地方使用非布尔值,JavaScript将相应地进行转换。
JavaScript中的这种自由值转换影响了等式的定义,等式运算符==
执行类型强制转换(尽管在实践中,等式运算符==
通常被避免,而使用严格等式运算符===
,它不执行类型强制转换)。
常量和变量允许我们在程序中使用名称引用值。常量使用const
声明,变量使用let
(或在较旧的JavaScript代码中使用var
)声明。JavaScript的常量和变量是无类型的;它们的声明不限制它们可以保存的值的类型。
(程序员的软技能:ke.qq.com/course/6034346)
标签:变量,对象,JavaScript,字符串,数组,类型,布尔值 From: https://www.cnblogs.com/web-666/p/17643605.html