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