前端面试中常被问到的问题之一就是“JavaScript的基本类型有几种?”。
有的回答“数字、字符串、布尔”,有的可能会再加上“Null、Undefined”。而有人可能认为“object”也是基本类型。到底是什么样呢?
所谓“基本类型(primitive types)”的概念ECMAScript(V3,V5)中压根就没有,它只是将类型分为6种。
ECMAScript只提到类型,用types表示,在V3,V5整个文档搜关键字“primitive”也没见“primitive type”,“primitive value”倒是有,如true/false/0-9等。这说明规范压根就没有所谓的“基本类型”、“原始类型”一说(primitive types)。如果非要说有那么object明显也是,即有6种基本类型。
一些书籍却经常使用这个概念,如《JavaScript高级程序设计》第一版、第二版,第三版。
第一版提到有5种原始类型,即Undefined、Null、Boolean、Number、String
第二版和第三版又搞出了个simple data type,翻译为简单数据类型(也称为基本数据类型),称对象为复杂数据类型。
另一本经典书《JavaScript权威指南(第6版)》第3章也提到了primitive types
先分为基本类型(primitive types)和对象类型,基本类型又分为数字,字符串,布尔,及两个特殊null,undefined。
5年前JavaScript方面的书籍还很少,这两本书就是其中之二,影响也很大,可谓经典。因此受此影响的JSer不乏少数。我想书作者把语言类型分为基本类型(元类型)和对象类型(复杂类型)也是符合学习逻辑的,复杂类型由简单类型组合而成。另外也是受到其它语言如Java的影响,它们也是把类型分为基本类型(8种)和对象类型。
但ECMAScript中没有所谓的primitive types,就好比它没有类(class)的概念一样(具有其它语言能力的人仍然喜欢在JavaScript使用名词“类”)。它里面提到的就是类型,可以把它理解成基本类型,但也应该是6种。这里的基本类型也不是Java中的基本类型,因为它包含了复杂数据类型-对象。
不是所有的书都认为JavaScript中基本类型只有5种(不包括对象),《JavaScript语言精髓与编程实践》认为是6种,如下
它没有将null归为其中,却增加了function类型。 它的依据是typeof的结果只有6种(仅含ES自身,不包括宿主对象),如下
var a = 1, b = '2', c = true, d, e = null, f = function(){} typeof a === 'number'; // true typeof b === 'string'; // true typeof c === 'boolean'; // true typeof d === 'undefined'; // true typeof e === 'object'; // true typeof f === 'function'; // true
一共是6中类型,注意null的类型时object。有的书说null的实现是当初的一个错误,谁知道呢。
我们来看wiki中基本数据类型的定义
- a basic type is a data type provided by a programming language as a basic building block. Most languages allow more complicated composite types to be recursively constructed starting from basic types.
- a built-in type is a data type for which the programming language provides built-in support. In most programming languages, all basic data types are built-in. In addition, many languages also provide a set of composite data types. Opinions vary as to whether a built-in type that is not basic should be considered "primitive".
翻译一下
- 基本类型是这样一种数据类型,它是由编程语言提供的最基本的构建块,多数语言还允许众多复杂的由基本类型组成的复合数据类型
- 内置类型是由编程语言自身提供的类型,多数编程语中所有的基本类型都是内置的。此外,很多语言还提供一组复合数据类型。一个内置类型是不是该认为是“原始的”的类型这个一直存在争议。
下次再有人问这个问题如何作答呢?
相关推荐
JavaScript中的数据类型分为两大类:基本类型和引用类型。基本类型包括undefined、boolean、number、string和null。这些类型的数据是存储在栈中的,它们是不可变的,也就是说一旦创建了基本类型的变量,就不能更改其...
javaScript基本数据类型
JavaScript的基本数据类型
JavaScript中有七种基本数据类型:String(字符串)、Number(数字)、Boolean(布尔值)、Null(空值)、Undefined(未定义)、Symbol(符号)和BigInt(大整数)。此外,还有两种引用类型:Object(对象)和...
这一特性使得JavaScript成为互联网应用开发的首选语言之一,无论是桌面端还是移动端,都能看到JavaScript的身影。 JavaScript的应用领域非常广泛,包括但不限于网页动态效果、表单验证、Ajax异步通信、前端框架(如...
本资源为JavaScript中复合类型的示例代码,其中包含string、date、object、json的语法定义和代码示例本资源为JavaScript中复合类型的示例代码,其中包含string、date、object、json的语法定义和代码示例本资源为...
变量在JavaScript中可以动态声明和赋值,数据类型包括基本类型(如字符串、数字、布尔值)和引用类型(如对象和数组)。运算符则用于处理这些数据,如算术运算符、比较运算符和逻辑运算符。流程控制结构使程序可以...
总之,JavaScript中的基本包装类型为基本数据类型的操作提供了便利,使得基本类型值能够调用方法,从而像操作对象那样处理数据,但与此同时,它们的使用也有一定的限制和特性,需要我们在编码实践中加以注意。
数据类型 JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和String。还有1种复杂数据类型——Object,Object本质上是由一组无序的名值对组成的。 typeof操作符 介于...
变量在JavaScript中无需预先声明,可以随时赋值并确定其类型,但推荐使用`let`、`var`或`const`进行声明以提高代码可读性和避免意外的全局变量。变量名需遵循一定的规则,如以字母、下划线或美元符号开头,后面可以...
JavaScript 是一种“脚本”(...如果想在浏览器的“地址”栏中执行 JavaScript 语句,用这样的格式: javascript:<JavaScript语句> 这样的格式也可以用在连接中: <a href="javascript:<JavaScript语句>">...</a>
ECMAScript 中有 5 种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和 String。还有 1种复杂数据类型——Object,Object 本质上是由一组无序的名值对组成的。ECMAScript 不支持任何创建...
在javascript中申明变量使用的关键字都是var,这点与其他的编程语言不尽相同,但是javascript亦含有五种基本的数据类型(也可以说是简单数据类型),它们分别是:Undefined,Null,Boolean,Number和String。...
Html+javaScript基础教程pptx
5. **弱类型与数据类型**:JavaScript是弱类型语言,数据类型包括基本类型(如`string`、`undefined`、`boolean`等)和引用类型,选项A正确,选项B中的`int`不是JavaScript的基本类型。 6. **循环与函数**:给定...
JavaScript的引用类型是其灵活性和强大功能的重要组成部分,掌握这些基本类型及其操作对于JavaScript开发者来说至关重要。无论是存储复杂数据结构,还是实现高级功能,引用类型都能发挥重要作用。随着JavaScript在...
JavaScript语法和数据类型(源代码)JavaScript语法和数据类型(源代码)JavaScript语法和数据类型(源代码)JavaScript语法和数据类型(源代码)JavaScript语法和数据类型(源代码)JavaScript语法和数据类型(源...
大家经常可以见到javascript中的一些数据类型,比如“undefined”、“boolean”、“string”等等,这篇文章就和大家一起来学习JavaScript基本数据类型及值类型和引用类型,有需要的童鞋参考下,本文写的不好地方,还...
变量是存储数据的容器,它们在JavaScript中有四个基本类型:整数、字符串、布尔型和实数。变量的命名规则是:以字母或下划线开头,可以包含数字,但不能使用JavaScript的关键字。例如,`var test1, test2`是合法的...