类型判断

1、类型判断有哪些方法,各有什么局限性(至少3个)

 

答:

  1. typeof:  局限性不能判断是否为数组
  2. instanceof

instanceof 是用来判断 A 是否为 B 的实例,表达式为:A instanceof B

instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型.instanceof 操作符的问题在于,它假定只有一个全局执行环境。

(3) constructor

(4) Object.prototype.toString

 

详细解答及引申问题:

(1)typeof:  局限性不能判断是否为数组

返回的结果用该类型的字符串(全小写字母)形式表示,包括以下 7 种:number、boolean、symbol、string、object、undefined、function 等

举例:

var a = "iamstring.";

var b = 222;

var c= [1,2,3];

var d = new Date();

var e = function(){alert(111);};

 

typeof a ------------> “string

typeof b ------------> “number”

typeof c ------------> “object

typeof d ------------> “object

typeof e ------------> “function

 

注意:考察特例

typeof null;

// “object”

typeof undefined

// "undefined"

typeof []

// "object"

 

 

(2)instanceof

instanceof 是用来判断 A 是否为 B 的实例,表达式为:A instanceof B,instanceof 检测的是原型.

instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型.

instanceof 操作符的问题在于,它假定只有一个全局执行环境。如果网页中包含多个框架,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的构造函数。如果你从一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自不同的构造函数。

c instanceof Array ---------------> true

d instanceof Date ---------------> true

f instanceof Function------------> true

 

注意:不能判断基本类型

b instanceof Number;  // false

a instanceof String;// false

 

(3)constructor

a.constructor == String // true

b.constructor == Number // true

c.constructor === Array ----------> true

d.constructor === Date -----------> true

e.constructor === Function -------> true

 

注意: constructor 在类继承时会出错 eg

function A(){};

function B(){};

A.prototype = new B(); //A继承自B

var aObj = new A();

aobj.constructor === B -----------> true;

aobj.constructor === A -----------> false;

 

(4) Object.prototype.toString

Object.prototype.toString.call(a) === ‘[object String]’ -------> true; Object.prototype.toString.call(b) === ‘[object Number]’ -------> true; Object.prototype.toString.call(c) === ‘[object Array]’ -------> true; Object.prototype.toString.call(d) === ‘[object Date]’ -------> true; Object.prototype.toString.call(e) === ‘[object Function]’ -------> true;

 

2、判断是否为数组的方法(至少3个)

答:

(1)[] instanceof Array

(2)[].constructor === Array

(3)Array.isArray([])

(4) Object.prototype.toString.call([]) ; // [object Array]

 

3、判断是否为JS原生函数

Function (value) {

return Object.prototype.toString.call(value) ===  “[object Function]”;

 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值