资讯专栏INFORMATION COLUMN

JavaScript中的数据类型及其检测

Bryan / 1372人阅读

摘要:中的数据类型及其检测数据类型基本类型引用类型类型检测只能检测基本数据类型,对于还有一个用于检测某个对象的原型链是否包含某个构造函数的属性适用于检测对象,它是基于原型链运作的属性返回一个指向创建了该对象原型的函数引用,该属性的值是哪个函数本身

JavaScript中的数据类型及其检测 1. 数据类型 1.1 基本类型

Number

String

Boolean

Null

Undefined

Symbol

1.2 引用类型

Object

Array

Function

RegExp

Date

2. 类型检测 2.1 typeof
var s = "Nicholas";
var b = true;
var i = 22;
var u;
var n = null;
var o = new Object();
var f = new Function();

console.info(typeof s);     // string
console.info(typeof b);     // boolean
console.info(typeof i);     // number
console.info(typeof u);     // undefined
console.info(typeof n);     // object
console.info(typeof o);     // object
console.info(typeof f);     // function

typeof只能检测基本数据类型,对于null还有一个Bug

2.2 instanceof

result = variable instanceof constructor
instanceof用于检测某个对象的原型链是否包含某个构造函数的prototype属性

function C() {}
function D() {}
var o = new C();
o instanceof C     // true, Object.getPrototypeOf(o) === C.prototype
o instanceof D     // false

function Animal() {}
function Cat() {}
Cat.prototype = new Animal();
var b = new Cat();
b instanceof Animal     // true

[1, 2, 3] instanceof Array      // true
/abc/ instanceof RegExp     // true
({}) instanceof Object      // true
(function() {}) instanceof Function     // true

instanceof适用于检测对象,它是基于原型链运作的

2.3 constructor

constructor属性返回一个指向创建了该对象原型的函数引用,该属性的值是哪个函数本身。

function Animal() {}
function Cat() {}
function BadCat() {}
Cat.prototype = new Animal();
BadCat.prototype = new Cat();
var a = new Animal();
a.constructor === Animal    // true
var b = new BadCat();
b.constructor === Animal    // true

constructor指向的是最初创建者,而且易于伪造,不适合做类型判断

2.4 toString
Object.prototype.toString.call();
({}).toString.call();
window.toString.call();
toString.call();
Object.prototype.toString.call([]);     // [object Array]
Object.prototype.toString.call({});     // [object Object]
Object.prototype.toString.call("");     // [object String]
Object.prototype.toString.call(new Date());     // [object Date]
Object.prototype.toString.call(1);      // [object Number]
Object.prototype.toString.call(function () {});     // [object Function]
Object.prototype.toString.call(/test/i);    // [object RegExp]
Object.prototype.toString.call(true);       // [object Boolean]
Object.prototype.toString.call(null);       // [object Null]
Object.prototype.toString.call();       // [object Undefined]

几乎十全十美,只是不能检测用户自定义类型

2.5 小结

typeof只能检测基本数据类型,对于null还有Bug

instanceof适用于检测对象,它是基于原型链运作的

constructor指向的是最初创建者,而且容易伪造,不适合做类型判断

toString适用于ECMA内置JavaScript类型(包括基本数据类型和内置对象)的类型判断

基于引用判等的类型检查都有跨窗口问题,比如instanceofconstructor

如果你要判断的是基本数据类型或JavaScript内置对象,使用toString;如果要判断的是自定义类型,请使用instanceof

参考

w3cPlus - JavaScrit的变量:如何检测变量类型

JavaScript高级程序设计(第3版)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/90905.html

相关文章

  • JavaScript数据类型及其检测

    摘要:值的比较只进行值的比较会进行数据类型的转换。只要在当前实例的原型链上,我们用其检测出来的结果都是。但检测与不一样,还可以处理基本数据类型的检测。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有几种类型的值? Javascript有两种数据类型,分别是基本数据类型和引用数据类型。其中...

    starsfun 评论0 收藏0
  • JavaScript数据类型及其检测

    摘要:值的比较只进行值的比较会进行数据类型的转换。只要在当前实例的原型链上,我们用其检测出来的结果都是。但检测与不一样,还可以处理基本数据类型的检测。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有几种类型的值? Javascript有两种数据类型,分别是基本数据类型和引用数据类型。其中...

    dingding199389 评论0 收藏0
  • JavaScript数据类型及其检测

    摘要:值的比较只进行值的比较会进行数据类型的转换。只要在当前实例的原型链上,我们用其检测出来的结果都是。但检测与不一样,还可以处理基本数据类型的检测。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有几种类型的值? Javascript有两种数据类型,分别是基本数据类型和引用数据类型。其中...

    Moxmi 评论0 收藏0
  • javascript之关键字,保留字, 变量及数据类型

    摘要:之关键字保留字变量及数据类型个人总结,分享也供自己日后查询变量中变量通过关键字来声明的。在使用声明变量但未对其加以初始化时,这个变量的值就是,例如在控制台输出是也就是未定义类型布尔类型该类型只有两个字面值和。 javascript之关键字,保留字, 变量及数据类型 个人总结,分享也供自己日后查询 1.变量 javascript 中变量通过var关键字(variable)来声明的。 变量...

    stormgens 评论0 收藏0

发表评论

0条评论

Bryan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<