-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
通用迭代器实现 #22
Labels
深入系列
主要介绍实现的思路
Comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
前言
写之前先整理一下思路
判断类型
判断基本类型我们可以使用
typeof
,不过对于引用类型,比如数组和函数都会返回object
,那么还有更好的判断方法么?那就是
Object.prototype.toString
这里使用
Object.prototype.toString
的原因是一些引用类型的toString
有自己的实现方式,比如数组的toString
返回的就是以","
分隔的文本。数组的判断可以基于上面方法,下面就是封装成一个函数
下面就来实现判断类数组的的思路,类数组就是指类似于
上面列举的几种对象,都存在
length
,而且都是一个对象,所以我们以这个为判断准则,下面就是实现判断还是比较简洁的,判断了三种情况
length
属性length
为 0 的情况length- 1
必须存在第一种就不说了,第二种为什么要判断 length 为
0
的情况呢?假设有一个对象
{a: 1, b: 2, length: 0}
,认为它是类数组是不是不太合适,还有arguments
是不是类数组对象根据函数的传递参数来变化,但是如果没有参数length
为 0 就返回 false,是不是也不太合适,其实这里主要就是为了判断一些边界的对象第三点,为什么要求
length - 1
存在?数组的 length 永远是成员数+1,要求
length - 1
存在实际上这是为了数组和类数组的形式想对应,例如:上面数组存在
,
我们认为前面两位就是空,但是如果取消了length - 1
必须存在,那么下面这种写法会出现下面情况each
上面把所需要用的讲解完毕了,下面就来实现一个最终版的 each
参考
JavaScript 专题之类型判断(下) #30
The text was updated successfully, but these errors were encountered: