01.javascript之数据类型

1.数据范例

JavaScript一共有六种数据范例。(ES6新增了第七种Symbol范例的值)

  • 数值(Number)
  • 字符串(String)
  • 布尔值(boolean)
  • undefined
  • null
  • 对象(object)

2.数据范例推断

JavaScript有三种要领,能够推断一个值的范例

  • typeof运算符
  • instanceof运算符
  • Object.prototype.toString()要领

typeof运算符

typeof运算符能够返回一个值的数据范例。
数值、字符串、布尔值离别返回numberstringboolean

typeof 123  //"number"
typeof 'hello'  //"string"
typeof true  //"boolean"

函数返回function

function f(){} 
typeof f  //"function"

undefined返回undefined

typeof undefined  // "undefined"

对象返回object

typeof {} // "object"
typeof [] // "object"

null返回object`。

typeof null // "object"

instanceof运算符

instanceof运算符返回一个布尔值,示意对象是不是为某个组织函数的实例。
因为instanceof搜检全部原型链,因而同一个实例对象,能够会对多个组织函数都返回true
instanceof运算符的一个用途,是推断值的范例。

var x = []
var f={}
x instanceof Array //true
f instanceof Object //true

instanceof运算符只能用于对象,不实用原始范例的值。

运用instanceof运算符,还能够处理,挪用组织函数时,忘了加new敕令的题目。

function Fn (f1, f2) {
  if (this instanceof Fn) {
    this._foo = f1;
    this._bar = b2;
  } else {
    return new Fn(f1, f2);
  }
}

Object.prototype.toString()

toString要领的作用是返回一个对象的字符串情势,默许情况下返回范例字符串。

var o1 = new Object();
o1.toString() //"[object Object]"

toString() 的运用:推断数据范例
Object.prototype.toString要领返回对象的范例字符串,因而能够用来推断一个值的范例。

var obj = {};
obj.toString() // "[object Object]"

上面代码挪用空对象的toString要领,效果返回一个字符串object Object,个中第二个Object示意该值的组织函数。这是一个非常有效的推断数据范例的要领。

因为实例对象能够会自定义toString要领,覆蓋掉Object.prototype.toString要领,所以为了获得范例字符串,最好直接运用Object.prototype.toString要领。经由过程函数的call要领,能够在恣意值上挪用这个要领,推断这个值的范例。

Object.prototype.toString.call(value)

上面代码示意对value这个值挪用Object.prototype.toString要领。
差别数据范例的Object.prototype.toString要领返回值以下。

  • 数值:返回[object Number]
Object.prototype.toString.call(12) //"[object Number]"
  • 字符串:返回[object String]
Object.prototype.toString.call('ab')  //"[object String]"
  • 布尔值:返回[object Boolean]
Object.prototype.toString.call(true)  //"[object Boolean]"
  • undefined:返回[object Undefined]
Object.prototype.toString.call(undefined)  //"[object Undefined]"
  • null:返回[object Null]
Object.prototype.toString.call(null)  //"[object Null]"
  • 数组:返回[object Array]
Object.prototype.toString.call([])  //"[object Array]"
  • 函数:返回[object Function]
var f = function (){}
Object.prototype.toString.call(f)  //"[object Function]"

运用这个特征,能够写出一个比typeof运算符更正确的范例推断函数。

var type = function (o){
  var s = Object.prototype.toString.call(o);
  return s.match(/\[object (.*?)\]/)[1].toLowerCase();
};

type({}); // "object"
type([]); // "array"
type(3); // "number"
type(null); // "null"
type(); // "undefined"
type(/abcd/); // "regex"
type(new Date()); // "date"

未完待续

    原文作者:qfstudy
    原文地址: https://segmentfault.com/a/1190000015606849
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞