美文网首页
判断类型

判断类型

作者: 你喜欢吃青椒吗_c744 | 来源:发表于2019-08-04 10:25 被阅读0次

类型

JavaScript 中有七种内置类型:

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

typeof

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

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

注意点:

  • 当操作数为null时。
  typeof null; // object
  • NaN(not a number)会被判断为number
typeof NaN; //number
typeof 1/0; // NaN
  • Symbol
typeof Symbol('foo'); //symbol
  • type可以判断函数对象
typeof function(){} === 'function';
typeof Math.sin === 'function';

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

  • 它不能区分对象、数组、正则,会返回"object"
typeof [1,2,3]; //object

instanceof

  • instanceof操作符返回一个布尔值,主要用来表明指定对象是否为某个构造函数的实例
  • 因为instanceof对整个原型链上的对象都有效,所以同一个实例对象,可能会对多个构造函数都返回true
  const s = new String('123');

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

  • 利用instanceof操作符,我们可以对自定义的对象进行判断:
  function Animal (name) {
    this.name = name
  }

  const fizz = new Animal('fizz');

  fizz instanceof Animal // true

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

constructor属性

  • prototype对象有一个constructor属性,默认指向prototype对象所在的构造函数。
  • 由于constructor属性是定义在原型(prototype)对象上面,意味着可以被所有实例对象继承
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种类型的方式

相关文章

  • NodeJs实用技巧

    判断数组类型为 Array 判断对象类型为 Object 判断对象类型为 Number

  • 饿了吗大前端阅读(一)

    类型判断 我记得的类型判断函数就是 typeOf:判断基本类型和Object instanceof:判断是否是指定...

  • JavaScript - 4.数据类型判断

    数据类型判断 节点类型 nodeType 数据类型 typeof 方法 数组 Array 的判断 非数字的判断

  • 类型判断和JSON判断

    类型判断 JSON判断

  • 类型判断

    is as? as! Any 用法: AnyObject

  • 判断类型

    类型 JavaScript 中有七种内置类型: 空值 (null)未定义 (undefined)布尔值 (bool...

  • 类型判断

    typeof操作符 typeof返回一个表示数据类型的字符串,返回结果包括:number、string、boole...

  • 类型判断

  • 类型判断

    js中的类型: 基本数据类型:Undefined、Null、Boolean、Number、String,Symbo...

  • 类型判断

    检查当前元素的类型 (传入的type首字母可以小写)

网友评论

      本文标题:判断类型

      本文链接:https://www.haomeiwen.com/subject/ibjedctx.html