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"
来源: http://www.bubuko.com/infodetail-2681788.html