二维码

JavaScript 类型

JavaScript 类型


在 JavaScript 中,有 5 种不同的数据类型可以包含值:

  • string
  • number
  • boolean
  • object
  • function

有 6 种类型的对象:

  • Object
  • Date
  • Array
  • String
  • Number
  • Boolean

以及 2 种不能包含值的数据类型:

  • null
  • undefined

运算符的类型

您可以使用typeof运算符来查找 JavaScript 变量。

1
2
3
4
5
6
7
8
9
10
typeof "John"                 // Returns "string"  
typeof 3.14                   // Returns "number"
typeof NaN                    // Returns "number"
typeof false                  // Returns "boolean"
typeof [1,2,3,4]              // Returns "object"
typeof {name:'John', age:34}  // Returns "object"
typeof new Date()             // Returns "object"
typeof function () {}         // Returns "function"
typeof myCar                  // Returns "undefined" *
typeof null                   // Returns "object"

请注意:

  • NaN 的数据类型为 number
  • 数组的数据类型是对象
  • 日期的数据类型是对象
  • null 的数据类型为 object
  • 未定义变量的数据类型为 undefined *
  • 尚未赋值的变量的数据类型为 同样未定义 *

您不能使用typeof来确定 JavaScript 对象是否是数组(或日期)。


原始数据

基元数据值是单个没有额外数据值的简单数据值 属性和方法。

typeof运算符可以返回以下基元类型之一:

  • string
  • number
  • boolean
  • undefined
1
2
3
4
5
typeof "John"              // Returns "string"  
typeof 3.14                // Returns "number"
typeof true                // Returns "boolean"
typeof false               // Returns "boolean"
typeof x                   // Returns "undefined" (if x has no value)


复杂数据

typeof运算符可以返回以下两种复杂类型之一:

  • function
  • object

typeof运算符为对象、数组和 null 返回“object”。

typeof运算符不返回函数的“object”。

1
2
3
4
typeof {name:'John', age:34} // Returns "object"  
typeof [1,2,3,4]             // Returns "object" (not "array", see note below)
typeof null                  // Returns "object"
typeof function myFunc(){}   // Returns "function"

typeof运算符为数组返回 “object”,因为在 JavaScript 中数组是对象。


typeof 的数据类型

typeof运算符不是变量。它是一个运算符。运算符 ( + - * / ) 没有任何数据类型。

但是,typeof运算符总是返回一个字符串(包含 操作数的类型)。


constructor 属性

constructor属性返回构造函数 函数。

1
2
3
4
5
6
7
"John".constructor                // Returns function String()  {[native code]}  
(3.14).constructor                // Returns function Number()  {[native code]}
false.constructor                 // Returns function Boolean() {[native code]}
[1,2,3,4].constructor             // Returns function Array()   {[native code]}
{name:'John',age:34}.constructor  // Returns function Object()  {[native code]}
new Date().constructor            // Returns function Date()    {[native code]}
function () {}.constructor        // Returns function Function(){[native code]}

您可以检查构造函数属性以找出对象是否为Array(包含单词 “Array”):

1
2
3
function isArray(myArray) {  
  return myArray.constructor.toString().indexOf("Array") > -1;
}

或者更简单,您可以检查对象是否是 Array 函数

1
2
3
function isArray(myArray) {  
  return myArray.constructor === Array;
}

您可以检查构造函数属性以确定对象是否为Date(包含单词“Date”):

1
2
3
function isDate(myDate) {  
  return myDate.constructor.toString().indexOf("Date") > -1;
}

或者更简单,您可以检查对象是否为 Date 函数

1
2
3
function isDate(myDate) {  
  return myDate.constructor === Date;
}


定义

在 JavaScript 中,没有值的变量的值是undefined的。该类型也是undefined的。

1
let car;    // Value is undefined, type is undefined

通过将值设置为undefined,可以清空任何变量。该类型也将是undefined的。

1
car = undefined;    // Value is undefined, type is undefined


空值

空值与undefined无关。

空字符串既有合法值,又有类型。

1
let car = "";    // The value is "", the typeof is "string"


在 JavaScript null中是“什么都没有”。它应该是不存在的东西。

不幸的是,在 JavaScript 中,null数据类型是对象。

你可以认为typeof null是一个对象是 JavaScript 中的一个错误。它应该为null

您可以通过将对象设置为null值来清空对象:

1
2
let person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};  
person = null;    // Now value is null, but type is still an object

您还可以通过将对象设置为undefined值来清空对象:

1
2
let person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};  
person = undefined;   // Now both value and type is undefined


Undefined 和 Null 之间的区别

undefinednull值相等,但类型不同:

1
2
3
4
5
typeof undefined           // undefined  
typeof null                // object

null === undefined         // false
null == undefined          // true


实例的运算符

如果对象是指定对象的实例,instanceof运算符将返回true

1
2
3
4
5
6
const cars = ["Saab", "Volvo", "BMW"];  

(cars instanceof Array);
(cars instanceof Object);
(cars instanceof String);
(cars instanceof Number);


void 运算符

void 运算符计算表达式并返回 undefined。此运算符通常用于获取 undefined 原始值,使用 “void(0)”(在计算没有 使用返回值)。

1
2
3
4
5
6
7
8
9
10
<a href="javascript:void(0);">  

  Useless link

</a>

<a href="javascript:void(document.body.style.backgroundColor='red');">
  Click me to change the background color of body to red

</a>