在 JavaScript 中有 5 种不同的可以包含值的数据类型:
string
number
boolean
object
function
有 6 种类型的对象:
Object
Date
Array
String
Number
Boolean
以及 2 种不能包含值的数据类型:
null
undefined
typeof 运算符
您可以使用 typeof
运算符来确定 JavaScript 变量的数据类型。
实例
<!DOCTYPE html>
<html lang="en"><body><p id="demo"></p><script>document.getElementById("demo").innerHTML ="'Bill' 是 " + typeof "Bill" + "<br>" +"3.14 是 " + typeof 3.14 + "<br>" +"NaN 是 " + typeof NaN + "<br>" +"false 是 " + typeof false + "<br>" +"[1, 2, 3, 4] 是 " + typeof [1, 2, 3, 4] + "<br>" +"{name:'Bill', age:19} 是 " + typeof { name: 'Bill', age: 19 } + "<br>" +"new Date() 是 " + typeof new Date() + "<br>" +"function () {} 是 " + typeof function () { } + "<br>" +"myCar 是 " + typeof myCar + "<br>" +"null 是 " + typeof null;</script>
</body></html>
<!--
typeof "Bill" // 返回 "string"
typeof 3.14 // 返回 "number"
typeof NaN // 返回 "number"
typeof false // 返回 "boolean"
typeof [1,2,3,4] // 返回 "object"
typeof {name:'Bill', age:19} // 返回 "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 "Bill" // 返回 "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"
一词):
实例
<!DOCTYPE html>
<html lang="en"><body><p id="demo"></p><script>const fruits = ["Banana", "Orange", "Apple"];document.getElementById("demo").innerHTML = isArray(fruits);function isArray(myArray) {return myArray.constructor.toString().indexOf("Array") > -1;}</script>
</body></html>
//true
更简单,您可以检查对象是否为数组函数:
<!DOCTYPE html>
<html><body><p id="demo"></p><script>const fruits = ["Banana", "Orange", "Apple", "Mango"];document.getElementById("demo").innerHTML = isArray(fruits);function isArray(myArray) {return myArray.constructor === Array;}</script></body></html>
//true
可以检查 constructor 属性以确定对象是否为日期(包含 "Date"
一词):
<!DOCTYPE html>
<html><body><p id="demo"></p><script>const myDate = new Date();document.getElementById("demo").innerHTML = isDate(myDate);function isDate(myDate) {return myDate.constructor.toString().indexOf("Date") > -1;}</script></body></html>
//true
更简单,您可以检查对象是否为日期函数
<!DOCTYPE html>
<html><body><p id="demo"></p><script>const myDate = new Date();document.getElementById("demo").innerHTML = isDate(myDate);function isDate(myDate) {return myDate.constructor === Date;}</script></body></html>
//true
Undefined
在 JavaScript 中,没有值的变量的值是 undefined
。类型也是 undefined
。
实例
let car; // 值是 undefined,类型也是 undefined。
通过将其值设置为 undefined
,可以清空任何变量。类型也将是 undefined
。
实例
car = undefined; // 值是 undefined,类型也是 undefined。
空值
空值与 undefined
无关。
空字符串既有合法值又有类型。
实例
let car = ""; // 值是 "",类型是 "string"
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 // objectnull === undefined // false
null == undefined // true