判断类型

2019-08-04  本文已影响0人  你喜欢吃青椒吗_c744

类型

JavaScript 中有七种内置类型:

空值 (null)
未定义 (undefined)
布尔值 (boolean)
数字 (number)
字符串 (string)
符号 (symbol,ES6中新增)
对象 (object) :复杂数据类型

typeof

typeof常常被用做判断基本类型,但它不能判断复杂数据类型。

  typeof undefined; // undefined
  typeof []; // object
  typeof '123'; // string

注意点:

  typeof null; // object
typeof NaN; //number
typeof 1/0; // NaN
typeof Symbol('foo'); //symbol
typeof function(){} === 'function';
typeof Math.sin === 'function';

从技术角度讲,函数在ECMAScript中是对象,不是一种数据类型。然而,函数也确实有一些特殊的属性,因此通过typeof操作符来区分函数和其他对象是有必要的。在实际的使用过程中有必要区分ObjectFunction,所以在typeof这里实现了

typeof [1,2,3]; //object

instanceof

  const s = new String('123');

  s instanceof String; // true
  s instanceof Object; // true

  function Animal (name) {
    this.name = name
  }

  const fizz = new Animal('fizz');

  fizz instanceof Animal // true

注意,instanceof对象只能用于复杂数据类型(数组,对象等),不能用于简单数据类型(布尔值,数字,字符串等)。此外,null和undefined都不是对象,所以instanceof 总是返回false。

constructor属性

function A(){};
var a=new A();
console.log(a.constructor===A) //true
console.log(a.constructor===Array) //false
 var a = new Array();

a.constructor; //Arrar
Arrar.constructor; //Function
image.png

toString

使用 Object.prototype.toString 方法, 可以获取到变量的准确的类型.

function foo(){};

Object.prototype.toString.call(1);  '[object Number]'
Object.prototype.toString.call('1'); '[object String]'
Object.prototype.toString.call(NaN); '[object Number]'
Object.prototype.toString.call(foo);  '[object Function]'
Object.prototype.toString.call([1,2,3]); '[object Array]'
Object.prototype.toString.call(undefined); '[object Undefined]'
Object.prototype.toString.call(null); '[object Null]'
Object.prototype.toString.call(true); '[object Boolean]'
Object.prototype.toString.call(Array); `[object Function]`
....

Object.prototype.toString 的原理是当调用的时候, 就取值内部的 [[Class]]属性值, 然后拼接成 '[object ' + [[Class]] + ']'这样的字符串并返回. 然后我们使用call方法来获取任何值的数据类型.

参考文章

JavaScript中的类型判断,了解一下?
Javascript 中的数据类型判断
JS灵巧判断7种类型的方式

上一篇下一篇

猜你喜欢

热点阅读