基本数据类型(原始数据类型)
有 7 种原始类型:string,number,bigint,boolean,symbol,null 和 undefined
一个对象:
- 能够存储多个值作为属性。
- 可以使用大括号
{}创建对象,例如:{name: "John", age: 30}。JavaScript 中还有其他种类的对象,例如函数就是对象。
许多内建对象已经存在,例如那些处理日期、错误、HTML 元素等的内建对象。它们具有不同的属性和方法。但是,这些特性(feature)都是有成本的!它们需要额外的资源来支持运作。
而解决方案看起来多少有点尴尬,如下:
- 原始类型仍然是原始的。与预期相同,提供单个值
- JavaScript 允许访问字符串,数字,布尔值和 symbol 的方法和属性。
- 为了使它们起作用,创建了提供额外功能的特殊“对象包装器”,使用后即被销毁。
“对象包装器”对于每种原始类型都是不同的,它们被称为 String、Number、Boolean、Symbol 和 BigInt。因此,它们提供了不同的方法。
数据类型
变量名使用==驼峰法==,变量名称必须仅包含字母、数字、符号 $ 和 _,使用let,var和const来声明一个变量。
数据类型:
number:在整数的末尾添加n可以创建bigint类型
bigint:用于任意长度的整数
string:
boolean:
null:仅仅是一个代表“无”、“空”或“值未知”的特殊值。只有null一个值的独立类型
undefined:表示未被赋值。只有undefined一个值
symbol:标识符 (以上为基本数据类型)
Object:对象(是引用数据类型,函数与数组本质都是对象)
可以使用typeof来确定数据类型,返回一个字符串。null的数据类型本应为null,但是用函数的结果为object,这是官方承认的错误
let a = null;
console.log(typeof a);//打印object另外==typeof==不是一个函数而是一个==操作符==,使用括号来表示,()并不是其本身的一部分,是数学分组的括号。
与instanceof的区别:
typeof用以判断基础数据类型 (null 除外)instanceOf借助原型链判断复杂数据类型
如以下示例:
const arr = [1,2]
console.log(typeof arr,arr instanceof Array);
// object true在 JavaScript 中,typeof arr 返回 object 而不是 array,这是由 JavaScript 语言的历史设计决定的,具体原因和相关知识点如下:
typeof运算符的设计局限typeof是 JavaScript 中用于检测数据类型的运算符,但它对引用类型的检测存在局限性:
- 对于原始类型(
number、string、boolean、undefined、symbol、bigint),typeof能准确返回对应的类型。 - 对于引用类型(对象、数组、函数等),
typeof通常返回object(除了函数返回function外)。
这是因为在 JavaScript 最初的设计中,数组被视为一种特殊的对象(本质是“索引化的对象”),typeof 运算符没有为数组单独设计返回值,而是统一返回 object。
- 为什么
arr instanceof Array返回true?instanceof运算符与typeof不同,它通过原型链判断对象的具体类型:
- 语法:
A instanceof B表示“A是否是B的实例”,即A的原型链上是否存在B.prototype。 - 数组
arr的原型链是:arr → Array.prototype → Object.prototype → null。
因此arr instanceof Array会检查到Array.prototype在arr的原型链上,返回true。
instanceof 的语义是检查操作符右边的函数原型是否存在于左边对象的原型链中
类型转换
大多数情况下,运算符和函数会自动将赋予它们的值转换为正确的类型。比如,alert 会自动将任何值都转换为字符串以进行显示。算术运算符会将值转换为数字。
在某些情况下,我们需要将值显式地转换为我们期望的类型。
使用Srting()和Number()来进行转换Boolean()
let value = true;
console.log(typeof value);
//仅是内容变为了string
console.log(value.toString());
console.log(typeof value);
//类型转变为string
value = String(value)
console.log(typeof value);
上述的大多数规则都容易理解和记忆。人们通常会犯错误的值得注意的例子有以下几个:
- 对
undefined进行数字型转换时,输出结果为NaN,而非0。 - 对
"0"和只有空格的字符串(比如:" ")进行布尔型转换时,输出结果为true

