这个世界之所以会出现无主的东西,是因为有人失去了记忆。——王小波《万寿寺》本文是lodash源码阅读的第二十篇。后续文章会在本仓库更新。欢迎star:pocket-lodashgitbook也会同步仓库的更新。Gitbook地址:pocket-lodash源码分析isObjectLike源码很短,如下:functionisObjectLike(value){returntypeofvalue=='object'&&value!==null}实际上是使用了typeof运算符。如果返回值为object且值不为null,则认为是类对象。这里需要简单说一下typeof操作符,typeof会按照以下规则返回:类型resultUndefined'undefined'Null'object'Boolean'boolean'Number'number'String'string'Symbol'symbol'宿主对象由主机实现,但它不能是'undefined','boolean','number'和'string'函数对象'function'的任何其他对象'object'。这里需要说的是null,这也是isObjectLike的关键。使用typeof运算符时,null会返回object,为什么会这样,看MDN上的解释:在JavaScript最初的实现中,JavaScript中的值是由一个代表类型的标签和实际数据值来表示的。对象的类型标号为0,由于null表示空指针(在大多数平台上该值为0x00),null的类型标号也变为0,typeofnull错误返回“object”。(参考)ECMAScript提出了一个修复(通过选择加入),但被拒绝了。这将导致typeofnull==='object'。另外需要注意的是,宿主实现的对象中,规范中规定不能返回‘undefined’、‘boolean’、‘number’和‘string’类型,但document.all是一个例外,返回是'undefined',这是一个非规范的实现。参考MDN:typeofLicenseSignature-Non-CommercialUse-NoDeduction4.0International(CCBY-NC-ND4.0)最后,所有文章会同步发送到微信公众号,欢迎关注,欢迎评论:作者:对角线的另一边
