JavaScript typeof
JavaScript typeof
在 JavaScript 中有 5 种不同的可以包含值的数据类型:
- string
- number
- boolean
- object
- function
有 6 种类型的对象:
- Object
- Date
- Array
- String
- Number
- Boolean
以及 2 种不能包含值的数据类型:
- null
- undefined
typeof 运算符
您可以使用 typeof 运算符来确定 JavaScript 变量的数据类型。
实例
typeof "John" // 返回 "string" typeof 3.14 // 返回 "number" typeof NaN // 返回 "number" typeof false // 返回 "boolean" typeof [1,2,3,4] // 返回 "object" typeof {name:'John', age:34} // 返回 "object" typeof new Date() // 返回 "object" typeof function () {} // 返回 "function" typeof myCar // 返回 "undefined" * typeof null // 返回 "object"
请注意:
- NaN 的数据类型是数字
- 数组的数据类型是对象
- 日期的数据类型是对象
- null 的数据类型是 object
- 未定义变量的数据类型为 undefined *
- 未赋值的变量的数据类型也是 undefined *
您无法使用 typeof 来确定 JavaScript 对象是否是数组(或日期)。
原始日期
原始数据值指的是没有附加属性和方法的单个简单数据值。
typeof 运算符可以返回以下原始类型之一:
- string
- number
- boolean
- undefined
实例
typeof "John" // 返回 "string" typeof 3.14 // 返回 "number" typeof true // 返回 "boolean" typeof false // 返回 "boolean" typeof x // 返回 "undefined" (if x has no value)
复杂数据
typeof 运算符可以返回两种复杂类型之一:
- function
- object
typeof 运算符会为对象、数组和 null 返回 "object"。
typeof 运算符不会为函数返回 "object"。
实例
typeof {name:'Bill', age:19} // 返回 "object" typeof [1,2,3,4] // 返回 "object"(非 "array",请注意下面的例子) typeof null // 返回 "object" typeof function myFunc(){} // 返回 "function"
typeof 运算符会为数组返回 "object",因为在 JavaScript 中数组是对象。
typeof 的数据类型
typeof 运算符并不是变量。它只是一个运算符。运算符 (+ - * /) 没有任何数据类型。
但是,typeof 运算符总是返回字符串(包含操作数的类型)。
constructor 属性
constructor 属性返回所有 JavaScript 变量的构造函数。
实例
"Bill".constructor // 返回 function String() {[native code]} (3.14).constructor // 返回 function Number() {[native code]} false.constructor // 返回 function Boolean() {[native code]} [1,2,3,4].constructor // 返回 function Array() {[native code]} {name:'Bill',age:19}.constructor // 返回 function Object() {[native code]} new Date().constructor // 返回 function Date() {[native code]} function () {}.constructor // 返回 function Function(){[native code]}
您可以检查 constructor 属性以确定对象是否为数组(包含 "Array" 一词):
Examplefunction isArray(myArray) { return myArray.constructor.toString().indexOf("Array") > -1; }
或者更简单,您可以检查对象是否为数组函数:
实例
function isArray(myArray) { return myArray.constructor === Array; }
您可以检查 constructor 属性以确定对象是否为日期(包含 "Date" 一词):
实例
function isDate(myDate) { return myDate.constructor.toString().indexOf("Date") > -1; }
或者更简单,您可以检查对象是否为日期函数:
实例
function isDate(myDate) { return myDate.constructor === Date; }
Undefined
在 JavaScript 中,没有值的变量的值是 undefined。类型也是 undefined。
实例
let car; // 值是 undefined,类型也是 undefined。
通过将其值设置为 undefined,可以清空任何变量。类型也将是 undefined。
实例
car = undefined; // 值是 undefined,类型也是 undefined。
Null
在 JavaScript 中 null 即是“无”。它应该是不存在的东西。
不幸的是,在 JavaScript 中,null 的数据类型是一个对象。
你可以认为它是 JavaScript 中的一个 bug,typeof null 是一个对象。类型应为 null。
您可以通过将对象设置为 null 来清空对象:
实例
let person = {firstName:"Bill", lastName:"Gates", age:19, eyeColor:"blue"}; person = null; // 现在值为 null,但类型仍然是对象
您还可以通过将对象设置为 undefined 来清空对象:
实例
let person = {firstName:"Bill", lastName:"Gates", age:19, eyeColor:"blue"}; person = undefined; // 现在值和类型都是未定义
undefined 与 null 的区别
undefined 和 null 值相等但类型不同:
typeof undefined // undefined typeof null // object null === undefined // false null == undefined // true