摘要:
js程序是构建在事件之上的。输入可能来自不同的外部源。在一些语言中,我们习惯地编写代码来等待某个特定的输入。 像这样的形式downloadSync称为同步函数(或阻塞函数)。程序会停止做任何工作,而等待它的输入。在这个例子中,也就是等待从网络上下载文件的结果。由于在等待下载完成的期间,计算机可以做其 阅读全文
摘要:
前言 又到了一章的总结,这章里的内容。是把我从一个代码的使用者,如何换位成一个代码的编写者。如何让别人用自己的代码更容易,不用去注意太多的无用细节,不用记住冗长的函数名。在使用API时怎样避免使用者会出现理解的偏差。如何处理一些特殊敏感的值,参数如何设置可以更好地自说明,如何减少API对状态的依赖, 阅读全文
摘要:
无状态的API的部分能力是将复杂操作分解为更小的操作的灵活性。一个很好的例子是字符串的replace方法。由于结果本身也是字符串,可以对前一个replace操作重复执行替换。这种模式的一个常见用例是在将字符串插入到HTML前替换字符串的特殊字符字母。 对replace的第一次调用返回一个将所有特殊字 阅读全文
摘要:
js是弱类型语言。许多标准的操作符和代码库会把输入参数强制转换为期望的类型而不是抛出错误。如果未提供额外的逻辑,使用内置操作符的程序会继承这样的强制转换行为。 强制转换 强制转换可以带来方便性,但也会带来相关的麻烦,一些错误无法显露出来,导致程序行为的不稳定和难以调试。当强制转换与重载的函数一起工作 阅读全文
摘要:
示例 设想有两个不同类的API。第一个是位向量:有序的位集合 enable方法被重载了,可以传入一个索引或索引的数组。第二个类的API是字符串集合:无序的字符串集合 其中add方法被重载了,除了可以接收字符串和字符串数组外,还可以接收一个字典对象。 函数重载 为了实现BitVerctor.proto 阅读全文
摘要:
想象创建wiki的库。wiki网站包含用户可以交互式地创建、删除和修改的内容。许多wiki都以简单、基于文本标记语言创建内容为特色。通常,这些标记语言只提供了HTML可用功能的一个子集,但是却有一个更简单、更清晰的源格式。例如,环绕星号的文本被格式化为粗体,环绕下划线的被格式化为带有下划线的文本,环 阅读全文
摘要:
API有时被归为两类:有状态的和无状态的。无状态的API提供的函数或方法的行为只取决于输入,而与程序的状态改变无关。字符串的方法是无状态的。字符串的内容不能被修改,方法只取决于字符串的内容及传递给方法的参数。不管程序其他部分的情况,表达式"foo".toUpperCase()总是产生"FOO"。相反,Date对象的方法却是有状态的。对于相同的Date对象调用toString方法会产生不同的结果,这取决于Date的各种set方法是否已经将Date的属性修改。 阅读全文
摘要:
早期版本中的条件逻辑如果不需要默认值则会避免计算默认值。只要计算默认值对诸如修改用用户接口或发送网络请求没有影响,那么这不是一个问题。
判断一个值是否已经提供了的逻辑。在早前版本中,对于字符串参数,我们将空字符串视为undefined等价。只将undefined视为缺省的参数更恰当。使用或(||)操作符是一个提供默认参数值有效但非一致的策略。
一致性是库设计的一个良好目标,因为它会给api的使用者带来更好的可预测性。 阅读全文
摘要:
undefined值很特殊,每当js无法提供具体的值时,就会产生undefined。 undefined值场景 未赋值的变量的初始值即为undefined。var x; x;//undefined 访问对象不存在的属性也会产生undefined。var obj={}; obj.x;//undefined 一个函数体结尾使用未带参数的return语句,或未使用return语句都会返回值undefin 阅读全文
摘要:
不要修改这样的约定。比如前端要处理多种语言html,css,js本来要记得东西都够多的啦。不要引入一些不必要的改变,使工作变得复杂。就像在css中我们在描述矩形的四条边的参数时,总是以上右下左的顺序。因为这个和margin,padding等属性约定相同顺序。如果违反了这个约定,页面表现一定会出错。 阅读全文