1.数据范例
JavaScript一共有六种数据范例。(ES6新增了第七种Symbol范例的值)
- 数值(Number)
- 字符串(String)
- 布尔值(boolean)
- undefined
- null
- 对象(object)
2.数据范例推断
JavaScript有三种要领,能够推断一个值的范例
- typeof运算符
- instanceof运算符
- Object.prototype.toString()要领
typeof运算符
typeof
运算符能够返回一个值的数据范例。
数值、字符串、布尔值离别返回number
、string
、boolean
。
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"
未完待续