资讯专栏INFORMATION COLUMN

js中检测数据类型的四种方法

darryrzhong / 2308人阅读

摘要:中检测数据类型的四种方法前言先说一下中的数据类型有哪几类主要分类两大类型,基本类型和引用类型。用法结果这样一看,似乎能满足的所有数据类型,那我们看下继承之后是否能检测出来结果小结可以看出,可用于检测所有的数据类型。

js中检测数据类型的四种方法 前言

先说一下JavaScript中的数据类型有哪几类?
主要分类两大类型,基本类型和引用类型。

1.typeof

先看一下用法:

console.log(typeof "");
console.log(typeof 1);
console.log(typeof true);
console.log(typeof null);
console.log(typeof undefined);
console.log(typeof []);
console.log(typeof function(){});
console.log(typeof {});

输出结果如下:
string
number
boolean
object
undefined
object
function
object

小结

typeof可以用于检测基本类型,但碰到引用类型均返回为object。

2.instanceof

看一下用法:

console.log("1" instanceof String);
console.log(1 instanceof Number);
console.log(true instanceof Boolean);
console.log([] instanceof Array);
console.log(function(){} instanceof Function);
console.log({} instanceof Object);

输出结果如下:
false
false
false
true
true
true

小结

不难看出,instanceof可以用于引用类型的检测,但对于基本类型是不生效的,另外,不能用于检测null和undefined。

3.constructor

先看一下用法:

console.log(("1").constructor === String);
console.log((1).constructor === Number);
console.log((true).constructor === Boolean);
console.log(([]).constructor === Array);
console.log((function() {}).constructor === Function);
console.log(({}).constructor === Object);

输出结果:
true
true
true
true
true
true

撇去null和undefined,似乎说constructor能用于检测js的基本类型和引用类型。但当涉及到原型和继承的时候,便出现了问题,如下:

function fun() {};

fun.prototype = new Array();

let f = new fun();

console.log(f.constructor===fun);
console.log(f.constructor===Array);

在这里,我们先是定义了一个函数fun,并将该函数的原型指向了数组,同时,声明了一个f为fun的类型,然后利用constructor进行检测时,结果如下:
false
true

小结

撇去null和undefined,constructor能用于检测js的基本类型和引用类型,但当对象的原型更改之后,constructor便失效了。

4.Object.prototype.toString.call()

用法:

var test = Object.prototype.toString;

console.log(test.call("str"));
console.log(test.call(1));
console.log(test.call(true));
console.log(test.call(null));
console.log(test.call(undefined));
console.log(test.call([]));
console.log(test.call(function() {}));
console.log(test.call({}));

结果:
[object String]
[object Number]
[object Boolean]
[object Null]
[object Undefined]
[object Array]
[object Function]
[object Object]

这样一看,似乎能满足js的所有数据类型,那我们看下继承之后是否能检测出来

function fun() {};

fun.prototype = new Array();

let f = new fun();

console.log(Object.prototype.toString.call(fun))
console.log(Object.prototype.toString.call(f))

结果:
[object Function]
[object Object]

小结

可以看出,Object.prototype.toString.call()可用于检测js所有的数据类型。

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

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

相关文章

  • JS程序

    摘要:设计模式是以面向对象编程为基础的,的面向对象编程和传统的的面向对象编程有些差别,这让我一开始接触的时候感到十分痛苦,但是这只能靠自己慢慢积累慢慢思考。想继续了解设计模式必须要先搞懂面向对象编程,否则只会让你自己更痛苦。 JavaScript 中的构造函数 学习总结。知识只有分享才有存在的意义。 是时候替换你的 for 循环大法了~ 《小分享》JavaScript中数组的那些迭代方法~ ...

    melody_lql 评论0 收藏0
  • 数据心降低成本四种方法

    摘要:调查研究表明,当数据中心停机时间的损失平均每分钟近,美元时,避免这种事件是节省数据中心成本的首个也是效果最为显著的方法。在调研机构波洛蒙研究所进行的一项年调查中,数据中心停机的平均损失超过万美元,最高的损失达到万美元以上。调查研究表明,当数据中心停机时间的损失平均每分钟近9,000美元时,避免这种事件是节省数据中心成本的首个也是效果最为显著的方法。不过,以下有四种方法可以帮助组织的数据中心避...

    ybak 评论0 收藏0
  • Vue.js应用四种AJAX请求数据模式

    摘要:应用的四种请求数据模式翻译原文出处鄙人翻译略差,别见笑。每个都有自己的利弊,应根据要求进行判断。二组件在使用框架时,组件负责管理自己的请求和独立状态。相反,将初始应用程序状态注入页面的内联脚本中,以便应用程序作为全局变量在需要时可用。 Vue.js应用的四种AJAX请求数据模式 翻译原文出处:4 AJAX Patterns For Vue.js Apps 鄙人翻译略差,别见笑。 如果...

    iKcamp 评论0 收藏0
  • JS基础-变量类型和计算 Part one

    摘要:变量类型值类型字符串数值布尔值变量各自存储自己的值,互相不影响,用检测类型引用类型对象数组函数内存共用,无限扩展属性,检测类型变量计算强制类型转换字符串不为空包括空格字符串为空是否为空,都为值类型强制转换的四种情况字符串拼接运算语句为时条件 1.变量类型 (1)值类型:字符串(string)、数值(number)、布尔值(boolean)、undefined 变量各自存储自己的值,互...

    NoraXie 评论0 收藏0

发表评论

0条评论

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