js 判断变量是否有值返回bool_判断js数据类型的四种方法以及优缺点

首先我们简单的说一下js中的几种数据类型

数据类型分为基本类型和引用类型:

基本类型:String、Number、Boolean、Null、Undefined

引用类型:Object、Array、Date、Function、Error、RegExp、Math、Number、String、Boolean、Globle。

然后判断数据类型的方法一般可以通过:typeof、instanceof、constructor、toString四种常用方法

1、typeof:(可以对基本类型做出准确的判断,但对于引用类型,用它就有点力不从心了)

typeof 返回一个表示数据类型的字符串,返回结果包括:number、boolean、string、object、undefined、function等6种数据类型。

typeof 可以对JS基本数据类型做出准确的判断(除了null),而对于引用类型返回的基本上都是object, 其实返回object也没有错,因为所有对象的原型链最终都指向了Object,Object是所有对象的`祖宗`。 但当我们需要知道某个对象的具体类型时,typeof 就显得有些力不从心了。

注意:typeof  null会返回object,因为特殊值null被认为是一个空的对象引用

2、instanceof判断对象和构造函数在原型链上是否有关系,如果有关系,返回真,否则返回假

[JavaScript] 纯文本查看 复制代码

?

我们来看一下

[JavaScript] 纯文本查看 复制代码

?

从上面的运行结果我们可以看到,基本数据类型是没有检测出他们的类型,但是我们使用下面的方式创建num、str、boolean,是可以检测出类型的:

[JavaScript] 纯文本查看 复制代码

?

3、constructor:查看对象对应的构造函数

constructor 在其对应对象的原型下面,是自动生成的。当我们写一个构造函数的时候,程序会自动添加:构造函数名.prototype.constructor = 构造函数名

[JavaScript] 纯文本查看 复制代码

?

判断数据类型的方法

[JavaScript] 纯文本查看 复制代码

?

从上面的测试中我们可以看到,undefined和null是不能够判断出类型的,并且会报错。因为null和undefined是无效的对象,因此是不会有constructor存在的

同时我们也需要注意到的是:使用constructor是不保险的,因为constructor属性是可以被修改的,会导致检测出的结果不正确

[JavaScript] 纯文本查看 复制代码

?

可以看出,constructor并没有正确检测出正确的构造函数

4、Object.prototype.toString(可以说不管是什么类型,它都可以立即判断出)

toString是Object原型对象上的一个方法,该方法默认返回其调用者的具体类型,更严格的讲,是 toString运行时this指向的对象类型, 返回的类型

格式为[object xxx],xxx是具体的数据类型,其中包括:

String,Number,Boolean,Undefined,Null,Function,Date,Array,RegExp,Error,HTMLDocument,... 基本上所有对象的类型都可以通过这个方法获取到。

[JavaScript] 纯文本查看 复制代码

?

从这个结果也可以看出,不管是什么类型的,Object.prototype.toString.call();都可以判断出其具体的类型。

接下来我们分析一下四种方法各自的优缺点

不同类型的优缺点typeof        instanceof         constructor        Object.prototype.toString.call优点        使用简单        能检测出引用类型基本能检测所有的类型(除了null和undefined)检测出所有的类型缺点        只能检测出基本类型(出null)        不能检测出基本类型,且不能跨iframeconstructor易被修改,也不能跨iframe        IE6下,undefined和null均为Object

从上表中我们看到了,instanceof和constructor不能跨iframe,上面没有细说,所以下面我们直接上例子喽

例:跨页面判断是否是数组

[JavaScript] 纯文本查看 复制代码

?

从结果中可以看出,constructor和instanceof都没有正确的判断出类型,只有object.prototype.toString.call();正确判断出了

其实面试官也经常喜欢让说一种最简单的判断是数组的方法,记住喽是object.prototype.toString.call()哦!

好了,今天就分享这些了!

更多学习资料可关注:itheimaGZ获取

你可能感兴趣的:(js,判断变量是否有值返回bool)