JS类型判断的方法

44次阅读

共计 1846 个字符,预计需要花费 5 分钟才能阅读完成。

js 中常用的数据类型

JavaScript 变量能够保存多种数据类型,而 JavaScript 中的数据类型分为基本数据类型和引用数据累心,常用的基本数据类型包括数字(Number)、字符串(String)、布尔值(Boolean)、Null、Undefine、Symbol 等,常用的引用数据类型包括 Object(对象)、Array(数组)、Function(函数)。基本类型和引用类型存储于内存的位置不同,基本类型直接存储在栈中, 而引用类型的对象存储在堆中,与此同时,在栈中存储了指针,而这个指针指向正是堆中实体的起始位置,区别如下:
let a = 10;
let b = a;
b = 20;
console.log(a) //10
console.log(b) //20
 上述代码中,a、b 都是基本数据类型,两者分别修改赋值,相互之间没有任何影响。在看医用类型的例子:
let x = {a:10,b:20}
let y = x
y.a = 100
y.b = 200
console.log(x) //{a:100,b:200}
console.log(y) //{a:100,b:200}
 上述代码中,x、y 都是引用类型。在执行了 x = y 之后,修改 y 的属性值,x 的也跟着变化。因为 x 和 y 都是引用类型,指向了同一个内存地址,即两者引用的是同一个值,因此 y 修改属性时,x 的值随之改动。

数据类型检测

  1. typeof
    typeof 返回一个表示数据类型的字符串,返回结果包括:number、boolean、string、symbol、object、undefined、function 等 7 种数据类型,但不能判断 null、array 等。
typeof Symbol(); // symbol 有效
typeof ''; // string 有效
typeof 1; // number 有效
typeof true; //boolean 有效
typeof undefined; //undefined 有效
typeof new Function(); // function 有效
typeof null; //object 无效
typeof []; //object 无效
typeof new Date(); //object 无效
typeof new RegExp(); //object 无效 
  1. instanceof
    是用来判断 A 是否为 B 的实例,表达式为:A instanceof B,如果 A 是 B 的实例,则返回 true, 否则返回 false。instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性,但它不能检测 null 和 undefined
[] instanceof Array; //true
{} instanceof Object; //true
new Date() instanceof Date; //true
new RegExp() instanceof RegExp //true
null instanceof Null // 报错
undefined instanceof undefined // 报错 
  1. Object.prototype.toString.call()
    Object.prototype.toString.call() 是最准确最常用的方式。
Object.prototype.toString.call('') ; // [object String]
Object.prototype.toString.call(1) ; // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(undefine) ; // [object Undefined]
Object.prototype.toString.call(null) ; // [object Null]
Object.prototype.toString.call(new Function()) ; // [object Function]
Object.prototype.toString.call(new Date()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
Object.prototype.toString.call(new Error) ; // [object Error]

正文完
 0