JavaScript—数据类型(一)

145 阅读2分钟

title.png

数据类型定义

计算机程序的运行需要对值 (value) 进行操作。在编程语言中,能够表示并操作的值的类型称做数据类型 (type) ,编程语言最基本的特性就是能够支持多种数据类型。

本文将详细对JavaScript中的数据类型进行归纳总结

数据类型分类

最新的 ECMAScript 定义了 8 种标准数据类型:

1、基础数据类型:

  • 布尔值(Boolean)true 和 false。
  • 数字(Number)JavaScript 不区分整数和浮点数,统一用 Number 表示,例如:38 或者 3.14。
  • 字符串(String)字符串是用来表示文本值的字符序列,例如:'Hello World'。
  • null一个表明 null 值的特殊关键字,表示一个特殊值,常用来表示空值。
  • undefined特殊关键字,表示值的空缺,它是变量的一种取值,表明变量没有初始化。
  • SymbolJavaScript中实例是唯一且不可改变的数据类型。
  • BigInt 只用来表示整数,可以安全地存储和操作大整数.

2、引用型数据类型: Object

包含普通对象Object,数组对象Array,函数对象Function,正则对象RegExp,日期对象Date,数学函数Math,存储数据对象Map、Set等

更多标准内置对象:点击查看

数据类型判断

在实际应用中,我们通常会需要判断数据类型种类,去执行相应的操作:

1、 typeof

  • typeof 操作符可以检测给定值的类型,而且总是返回上述数据类型值中的一种
类型typeof返回值
Null"object"
Undefined"undefined"
Boolean"boolean"
Number"number"
BigInt"bigint"
String"string"
Symbol"symbol"
Function"function"
其他任何对象"object"

注: 在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null 的类型标签是 0,typeof null 也因此返回 "object"

  • typeof 可以满足判断原始类型的值,但是如果用来判断对象类型,就不太适用了
typeof [1, 2, 4] === 'array' // false
typeof new Date() // 'object'
typeof /[^[1-9]$]/ // 'object'
  • typeof 操作符的优先级高于加法(+)等二进制操作符。因此,需要用括号来计算加法结果的类型。
const num = 99;
typeof num + " Ten"; // "number Ten"
typeof (num + " Ten"); // "string"
  • typeof 通常总是保证为它提供的任何操作数返回一个字符串。即使使用未声明的标识符,typeof 也会返回 "undefined",而不是抛出错误。 但在加入了块级作用域的 let 和 const 之后,在其被声明之前对块中的 let 和 const 变量使用 typeof 会抛出一个 ReferenceError。块作用域变量在块的头部处于“暂存死区”,直至其被初始化,在这期间,访问变量将会引发错误。
typeof undeclaredVariable // undefined
var undeclaredVariable

typeof newLetVariable // ReferenceError
let newLetVariable

2、instanceof

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。原型链上可以有多个类型的构造函数的prototype

let str = new String("String created with constructor");
let num = Number(123), bool = Boolean(true);
let myDate = new Date();
let myObj = {}, myNonObj = Object.create(null);

'simpleStr' instanceof String; // 返回 false,非对象实例,因此返回 false
str instanceof String; // 返回 true
str instanceof Object; // 返回 true

123 instanceof Number // false
num instanceof Number // true

true instanceof Boolean // false
bool instanceof Boolean // true

myObj instanceof Object;    // 返回 true,尽管原型没有定义
({})  instanceof Object;    // 返回 true,同上
myNonObj instanceof Object; // 返回 false,一种创建非 Object 实例的对象的方法

str instanceof Date; //返回 false

myDate instanceof Date;     // 返回 true
myDate instanceof Object;   // 返回 true
  • 还需要注意nullundefined都返回了false,这是因为它们的类型就是自己本身,并不是Object创建出来它们,所以返回了false。
 undefined instanceof Object //false 
 null instanceof Object //false

3、Object.prototype.toString

Object.prototype.toString() 返回 "[object Type]",这里的 Type 是对象的类型。

const toString = Object.prototype.toString;

toString.call(123); //"[object Number]"
toString.call('string'); //"[object String]"
toString.call(true); //"[object Boolean]"
toString.call(Symbol('syb')); // "[object Symbol]"
toString.call([1, 2, 3, 4]); //"[object Array]"
toString.call(function(){ console.log('this is function'); }); //"[object Function]"
toString.call({name:'cs', age:18}); //"[object Object]"
toString.call(undefined); //"[object Undefined]"
toString.call(null); //"[object Null]"
toString.call(Math); // "[object Math]“;
toString.call(new Date()); //"[object Date]"
toString.call(/^[a-zA-Z]{5,20}$/); //"[object RegExp]"
toString.call(new Map()); //"[object Map]"
toString.call(new Set()); //"[object Set]"
toString.call(new Error()); //"[object Error]"

arguments 对象返回 "[object Arguments]"。其他所有内容,包括用户自定义的类,除非有一个自定义的 Symbol.toStringTag,否则都将返回 "[object Object]"

总结

阅读本文您将收获

  • JS 中数据类型的种类
  • JS 中常用的数据类型判断方法

最后 如果你觉得这篇文章对你有益,烦请点赞以及分享给更多需要的人!