上一页 1 2 3 4 5 6 7 ··· 11 下一页
摘要: 讨论对象这个在js中的万能的数据结构。对象可以表式为多种的形式,表示为字典和数组之间的区别。更多的我觉得这章讨论多的是一些对应实现功能的相关操作,有可能出现的bug以及如何避免来修复这些bug。比如下面会说到的for...in枚举属性的操作,可能因为对原型的一些操作,最终造成数据对象的操作的破坏。对于属性顺序有要求的如何处理,对类数组如何处理等。 阅读全文
posted @ 2016-06-30 09:32 脚后跟着猫 阅读(847) 评论(0) 推荐(0) 编辑
摘要: 得担心一种特殊的情况。如果使用单个数字参数来调用Array构造函数,效果完全不同。它试图创建一个长度为给定参数的空数组。这意味着['hello']和new Array('hello'),但[17]和new Array(17)的行为完全不同。 字面量更清晰,更优雅,更不易出错,更规范,更一致。 阅读全文
posted @ 2016-06-30 09:27 脚后跟着猫 阅读(247) 评论(0) 推荐(0) 编辑
摘要: Array.prototype中的方法,这两条都不是必须的,因为在增加或删除索引属性的时候它们都会强制地更新length属性。 Array方法中只有一个不是通用的,即数组连接方法concat。该方法可以由任意的类数组接收者调用,但它会检查其参数[[Class]]属性。如果参数是一个真实的数组,那么concat会将该数组的内容连接起来作为结果;否则,参数将以一个单一的元素来连接。 阅读全文
posted @ 2016-06-29 11:53 脚后跟着猫 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 使用迭代方法替换for循环使得代码可读,并且避免了重复循环控制逻辑 使用自定义的迭代函数来抽象未被标准库支持的常见循环模式 在需要提前终止循环的情况下,仍然推荐使用传统的循环。另外,some和every方法也可用于提前退出 阅读全文
posted @ 2016-06-29 11:08 脚后跟着猫 阅读(578) 评论(0) 推荐(5) 编辑
摘要: for...in循环在运行时出错了错误,并没有要求枚举对象的修改与当前保持一致。事实上,ES对并发修改在不同js环境下的行为的规范留有余地。标准规定: 如果被枚举的对象在枚举期间添加了新的属性,那么在枚举期间并不能保证新添加的属性能被访问。 上面规范的实际后果:如果我们修改了被枚举的对象,则不能保证for...in循环的行为是可预见的。 阅读全文
posted @ 2016-06-28 09:00 脚后跟着猫 阅读(480) 评论(0) 推荐(2) 编辑
摘要: 该方法确保你需要整数索引和数组元素时就能获取到它们,并且绝不会混淆它们或引发字符串的强制转换。此外,它还可以确保正确的迭代数组,并且不会意外地包括存储在数组对象或其原型链中的非整数属性。 阅读全文
posted @ 2016-06-28 09:00 脚后跟着猫 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 之前的几条都不断地重复着for...in循环,它便利好用,但又容易被原型污染。for...in循环最常见的用法是枚举字典中的元素。这里就是从侧面提出不要在共享的Object.prototype中增加可枚举的属性。这就导致,我们在开发的时候,不能在Object.prototype中添加有用的方法。如,我们想增加一个产生对象属性名数组的allKeys方法将会怎么样?Object.prototype.a 阅读全文
posted @ 2016-06-27 11:48 脚后跟着猫 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 对象属性无序性 js对象是一个无序属性集合。var obj={}; obj.a=10; obj.b=30; 属性a和属性b并没有谁前谁后之说。for...in循环,先输出哪个属性都有可能。获取和设置不同的属性与顺序无关,都会以大致相同的效率产生相同的结果。也就是说访问属性a和访问属性b,没有哪个访问更快之说。ES标准并未规定属性存储的任何特定顺序,甚至于枚举对象也未涉及。for...in循环会挑. 阅读全文
posted @ 2016-06-27 11:47 脚后跟着猫 阅读(660) 评论(0) 推荐(1) 编辑
摘要: 我们是使用dict对象的hasOwnProperty方法,但其实它自身并没有这个方法,而是继承自Object.prototype对象。如果dict字典对象有一个同为"hasOwnProperty"名称的属性,那么原型中的hasOwnProperty方法不会被访问到。这里会优先读取自身包含的属性,找不到才会从原型链中查找。 阅读全文
posted @ 2016-06-24 09:56 脚后跟着猫 阅读(828) 评论(0) 推荐(2) 编辑
摘要: ES5提供了标准方法来创建一个没有原型的对象。Object.create函数能够使用一个用户指定的原型链和一个属性描述符动态地构造对象。属性描述符描述了新对象属性的值及特性。通过简单传递一个null原型参数和一个空的描述符,就可以建立一个真正的空对象。 阅读全文
posted @ 2016-06-24 09:53 脚后跟着猫 阅读(583) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 11 下一页
返回
顶部