你问我答 | JavaScript中数组如何检测 ?

  • 系列文章——[你问我答]
  • 相关代码github地址 web-interview-questions
  • 文章虽短,贵在坚持,感谢star

你问

在JavaScript中如何检测数组?换言之,你有什么判断数组的方法?

我答

背景

自从ECMA 3 做出规定之后,就出现了——确定某个对象是不是数组的经典问题,面试官百问不厌

方法一

let targetArr = [];

const fn = (target) => {
  const isArray = target instanceof Array;

  return isArray;
};
const result = fn(targetArr);
console.log(result); // true

缺点

使用instanceof操作符 前提条件是只有一个全局的环境,如果网页中存在多个框架,实际上就存在两个以上不同版本的Array 构造函数, 假使我们从一个框架向另一个框架传入一个数组,那么传入的数组与第二个框架中的数组分别具有各自不同的构造函数

方法二

let targetArr = [];

const bar = (target) => {
  const isArray = Array.isArray(target)

  return isArray;
};
const result = bar(targetArr);
console.log(result); // true

缺点

由于是新api 浏览器对其的支持不一

IE9+ ;Firefox 4+ ;Safari 5+; Op 10.5+ 和谷歌浏览器

方法三

let timeManager = ['罗志祥','文章']

const isArray =(targetArr)=>{
  return Object.prototype.toString.call(targetArr) == "[object Array]"
}
const res = isArray(timeManager)
console.log(res)

在任何值上调用Object原生的toString() 方法,都会返回[object NativeConstructorName] 格式的字符串 每个类在内部都有一个[[class]] 属性 ,这个属性中就指定了上述字符串中的构造函数名

优点

由于原生数组的构造函数名与全局作用域无关,因此使用toString 技能保证返回的一致的值

参考

  • 《JavaScript 高级程序设计》

https://juejin.im/post/5ea842545188256d8a22786c

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论