大家好,我是前端 - 西瓜兄弟。今天,我将讨论什么是JS类对象,以及如何将数组对象转换为数组。
类对象是包含长度属性的对象,但此对象不是数组。
一般而言,存在0?lentht-1的属性,结构性能与数组非常相似。
从底层来看,该对象的原型链上没有阵列。构造,因此我们不能使用唯一的方法,例如foreach和array.prototype上的映射。
关于原型链,您可以阅读本文:“如何以主要链的方式获得JS继承?”
如果您强行将foreach方法用于组对象,则将获得类型错误。
除了手动创建的类对象外,还有以下公共数组对象:
让我们看看我们必须将数组转换为数组。
我们可以使用array.prototyle.slice。
空气阵列效应与阵列相同。原型,因为空数组本身没有切片方法,因此它将转到原始链以获取数组。Prototype.prototype.除了短比较短的短时,没有优势。
然后调用来自function.protype。您可以使用指定的值调用函数。这是array.prototype.slice.slice.我们不提供切片方法以启动和结束位置参数,因此默认情况下将采用整个范围。
切片将在迭代期间跳过未存在的索引属性,因此您会看到空的特殊值,这与未定义有所不同。您可以认为它不是初始化的。foreach和map已构建 - 在方法中会跳过不执行传输恢复功能的方法。
一个例子:
什么原则?
因为切片用于复制新的子阵列,而只有操作目标才是长度属性。
以下是array.prototype.slice的核心实现。默认的启动和结束都在长度范围内。
您会发现,在此类对象替换此此处后,您可以复制一个真实的数组。
ES6的新方法可以将数组对象或迭代对象转换为数组。
它与array.prototyle.slice.call()有些不同,而不存在的索引的值则由未定义设置。
如果对象既是组的对象,又是迭代对象,则array.from()方法使用对象的迭代方法。
一般而言,构建的调用JS的方法同时返回数组对象。我们通常喜欢使用扩展运算符(),更优雅。
一般而言,我们在开发中遇到的类对象是由JS的构建方法返回的,它也是迭代对象。我们通常使用扩展操作员来获取它。
如果类对象不是可用的对象,则可以使用它。
前者将为不存在的索引空虚,而后者是未定义的。我们可以认为基本知识并没有太大不同。建议更好地使用它。
公共帐户的起点:西瓜兄弟的前端
原始:https://juejin.cn/post/7101689128844001293