摘要:中的数据类型及其检测数据类型基本类型引用类型类型检测只能检测基本数据类型,对于还有一个用于检测某个对象的原型链是否包含某个构造函数的属性适用于检测对象,它是基于原型链运作的属性返回一个指向创建了该对象原型的函数引用,该属性的值是哪个函数本身
JavaScript中的数据类型及其检测 1. 数据类型 1.1 基本类型
Number
String
Boolean
Null
Undefined
Symbol
1.2 引用类型Object
Array
Function
RegExp
Date
2. 类型检测 2.1 typeofvar 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 instanceofresult = 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 constructorconstructor属性返回一个指向创建了该对象原型的函数引用,该属性的值是哪个函数本身。
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 toStringObject.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类型(包括基本数据类型和内置对象)的类型判断
基于引用判等的类型检查都有跨窗口问题,比如instanceof和constructor
如果你要判断的是基本数据类型或JavaScript内置对象,使用toString;如果要判断的是自定义类型,请使用instanceof
参考w3cPlus - JavaScrit的变量:如何检测变量类型
JavaScript高级程序设计(第3版)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/90905.html
摘要:值的比较只进行值的比较会进行数据类型的转换。只要在当前实例的原型链上,我们用其检测出来的结果都是。但检测与不一样,还可以处理基本数据类型的检测。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有几种类型的值? Javascript有两种数据类型,分别是基本数据类型和引用数据类型。其中...
摘要:值的比较只进行值的比较会进行数据类型的转换。只要在当前实例的原型链上,我们用其检测出来的结果都是。但检测与不一样,还可以处理基本数据类型的检测。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有几种类型的值? Javascript有两种数据类型,分别是基本数据类型和引用数据类型。其中...
摘要:值的比较只进行值的比较会进行数据类型的转换。只要在当前实例的原型链上,我们用其检测出来的结果都是。但检测与不一样,还可以处理基本数据类型的检测。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有几种类型的值? Javascript有两种数据类型,分别是基本数据类型和引用数据类型。其中...
摘要:之关键字保留字变量及数据类型个人总结,分享也供自己日后查询变量中变量通过关键字来声明的。在使用声明变量但未对其加以初始化时,这个变量的值就是,例如在控制台输出是也就是未定义类型布尔类型该类型只有两个字面值和。 javascript之关键字,保留字, 变量及数据类型 个人总结,分享也供自己日后查询 1.变量 javascript 中变量通过var关键字(variable)来声明的。 变量...
阅读 3279·2021-11-25 09:43
阅读 2083·2021-09-22 10:02
阅读 3307·2021-09-06 15:00
阅读 2296·2019-08-30 15:56
阅读 2345·2019-08-30 15:54
阅读 3222·2019-08-30 14:14
阅读 2257·2019-08-29 17:25
阅读 2900·2019-08-29 17:16