JavaScript typeof 运算符
typeof 运算符
typeof 运算符返回 JavaScript 变量的数据类型。
基本数据类型
在 JavaScript 中,基本值是单个值,没有属性或方法。
JavaScript 有 7 种基本数据类型
- 字符串
- 数字
- 布尔值
- BigInt
- 符号
- 空值
- 未定义
typeof
运算符返回变量或表达式的类型。
示例
typeof "John" // 返回字符串
typeof ("John"+"Doe") // 返回字符串
typeof 3.14 // 返回数字
typeof 33 // 返回数字
typeof (33 + 66) // 返回数字
typeof true // 返回布尔值
typeof false // 返回布尔值
typeof 1234n // 返回 BigInt
typeof Symbol() // 返回符号
typeof x // 返回未定义
自己试一试 »
typeof null // 返回对象
自己试一试 »
注意
在 JavaScript 中,null
是一个基本值。但是,typeof
返回“对象”。
这是一个众所周知的 JavaScript 错误,并且有历史原因。
复杂数据类型
复杂数据类型可以存储多个值和/或不同的数据类型。
JavaScript 有一种复杂数据类型
- 对象
所有其他复杂类型,如数组、函数、集合和映射,都只是不同类型的对象。
typeof
运算符只返回两种类型
- 对象
- 函数
示例
typeof {name:'John'} // 返回对象
typeof [1,2,3,4] // 返回对象
typeof new Map() // 返回对象
typeof new Set() // 返回对象
typeof function (){} // 返回函数
自己试一试 »
注意
typeof
运算符对所有类型的对象返回对象
- 对象
- 数组
- 集合
- 映射
您不能使用 typeof
来确定 JavaScript 对象是数组还是日期。
如何识别数组
如何知道一个变量是否是数组?
ECMAScript 5 (2009) 为此定义了一个新方法:Array.isArray()
instanceof 运算符
instanceof
运算符如果对象是指定对象类型的实例,则返回 true
示例
// 创建一个日期
const time = new Date();
(time instanceof Date);
自己试一试 »
// 创建一个数组
const fruits = ["apples", "bananas", "oranges"];
(fruits instanceof Array);
自己试一试 »
// 创建一个映射
const fruits = new Map([
["apples", 500],
["bananas", 300],
["oranges", 200]
]);
(fruits instanceof Map);
自己试一试 »
// 创建一个集合
const fruits = new Set(["apples", "bananas", "oranges"]);
(fruits instanceof Set);
自己试一试 »
未定义的变量
未定义变量的 typeof
为 undefined
。
没有值的变量的 typeof
为 undefined
。其值也是 undefined
。
任何变量都可以通过将其值设置为 undefined
来清空。
其类型也将为 undefined
。
空值
空值与 undefined
无关。
空字符串既有合法值,也有类型。
空值
在 JavaScript 中,null
代表“无”。它应该是指不存在的东西。
不幸的是,在 JavaScript 中,null
的数据类型是对象。
您可以通过将其设置为 null
来清空对象。
示例
// 创建一个对象
let person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
person = null;
// 现在值为空,但类型仍然是对象
自己试一试 »
您也可以通过将其设置为 undefined
来清空对象。
示例
let person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
person = undefined;
// 现在值和类型都为 undefined
自己试一试 »
Undefined 和 Null 之间的区别
undefined
和 null
在值上相等,但在类型上不同。
typeof undefined // undefined
typeof null // object
null === undefined // false
null == undefined // true
自己试一试 »
构造函数属性
constructor
属性返回所有 JavaScript 变量的构造函数。
示例
// 返回函数 Object() {[native code]}
{name:'John',age:34}.constructor
// 返回函数 Array() {[native code]}
[1,2,3,4].constructor
// 返回函数 Date() {[native code]}
new Date().constructor
// 返回函数 Set() {[native code]}
new Set().constructor
// 返回函数 Map() {[native code]}
new Map().constructor
// 返回函数 Function() {[native code]}
function () {}.constructor
自己试一试 »
使用构造函数,您可以检查一个对象是否为 数组
使用构造函数,您可以检查一个对象是否为 日期
总结
typeof "John" // 返回 "string"
typeof ("John"+"Doe") // 返回 "string"
typeof 3.14 // 返回 "number"
typeof (33 + 66) // 返回 "number"
typeof NaN // 返回 "number"
typeof 1234n // 返回 "bigint"
typeof true // 返回 "boolean"
typeof false // 返回 "boolean"
typeof {name:'John'} // 返回 "object"
typeof [1,2,3,4] // 返回 "object"
typeof {} // 返回 "object"
typeof [] // 返回 "object"
typeof new Object() // 返回 "object"
typeof new Array() // 返回 "object"
typeof new Date() // 返回 "object"
typeof new Set() // 返回 "object"
typeof new Map() // 返回 "object"
typeof function () {} // 返回 "function"
typeof x // 返回 "undefined"
typeof null // 返回 "object"
自己试一试 »
注意
NaN(非数字)的数据类型为 number!
void 运算符
void 运算符会评估表达式并返回 undefined。此运算符通常用于使用 “void(0)” 获取 undefined 原语值(在不使用返回值的情况下评估表达式时很有用)。
示例
<a href="javascript:void(0);">
无用链接
</a>
<a href="javascript:void(document.body.style.backgroundColor='red');">
点击我将 body 的背景颜色更改为红色
</a>
自己试一试 »