随笔分类 - 编写高质量代码(改善JS程序建议)
来源于<编写高质量代码(改善Javascript程序的188个建议)>一书
摘要:JavaScript允许为语言的基本数据类型定义方法.通过Object.prototype添加原型方法,该方法可被所有的对象,.这样的方法对函数,数组,字符串,数字,正则表达式和布尔值都适用.例如,通过Function.prototype增加方法,使该方法对所有函数可用 Function.proto
阅读全文
摘要:在被调用前,JavaScript函数仅是词法意思上的机构,没有实际的价值,在预编译函数时,也仅是简单地分析函数的词法,语法结构,并根据函数标识符预定一个函数占据的内部空间,其内部结构和逻辑并没有被运行.但是,一旦函数被调用执行,其上下文环境也会随之财产生.可以说,上下文环境是函数运行期的一个动态环境
阅读全文
摘要:闭包在开发中具有重要的应用价值,由于闭包具有持久性,生成的闭包不会立即被销毁,因此它会持续占用系统资源.如果大量使用闭包,将会造成系统资源紧张,甚至导致内存溢出等错误.另外,闭包在回调函数中会带来负面影响,因此在使用时应该慎重. 下面示例利用闭包来存储变量所有变化的值 function f(x){
阅读全文
摘要:闭包是指词法表示包括不必计算的变量的函数,闭包函数能够使用函数外定义的变量. 闭包结构有以喜爱盎格比较鲜明的特性: (1)封闭性 外界无法访问闭包内部的数据,如果在比包内声明变量,外界是无法访问的,除非闭包主动向外界提供访问接口. (2)持久性 对于一般函数来说,在调用完毕后,系统会自动注销函数,而
阅读全文
摘要:在JavaScript中,函数就是对象,对象是"名/值"对集合,并拥有一个到原型对象的隐藏连接.对象字面量产生的对象连接到object.prototype,函数对象连接到Function.prototype,该原型对象本身连接到object.prototype.每个函数在创建时都有两个附加的隐藏属性
阅读全文
摘要:调用函数更便捷的方式是使用Function对象的call和apply方法.apply和call方法在本质上没有太大的区别,只不过他们传递给函数的参数方式不同,apply是以数组形式进行参数传递,而call方法可以同时传递多个值. 如果某个函数仅能够接收多个参数列表,而现在希望把一个数组的所有元素作为
阅读全文
摘要:Javascript支持Arguments机制.Arguments是一个为数组,可以通过数组下标形式获取该集合中传递给函数的参数值.例如:下面函数中,没有指定形参,但在函数体内通过Arguments对象可以获取传递给该函数的每个参数值. function f(){ for(var i = 0;i<a
阅读全文
摘要:定义函数的方法包括3种:function语句,Function构造函数和函数直接量.不管用哪种方法定义函数,它们都是Function对象的实例,并将继承Function对象所有默认或自定义的方法和属性, //使用function语句编写函数 function f(x){ return x } //使
阅读全文
摘要:数组下标默认为大于或等于0的整数,不过JavaScript允许数组下标可以为任意表达式甚至为任意类型数据.但是如果该数组的下标都不是为大于或等于0的整数,那么求它的长度length为0 (1) 文本下标 var a = [] a[-1] =1 console.log(a[-1]); //1 cons
阅读全文
摘要:sort方法不仅按字母顺序进行排序,还可以根据其他顺序执行操作.这时就必须为方法提供一个比较函数的参数,该函数要比较两个值,然后返回一个用于说明这两个值得相对顺序的数字.比较函数应该具有两个参数a和b,其返回值如下: 如果根据自定义评判标准,a小于b,在排序后的数组中a应该出现在b之前,就返回一个小
阅读全文
摘要:删除数组元素的方法有很多种,最简单就是利用length属性来截断数组,但这种方法比较笨,进能够截断尾部元素.在JS中,由于数组其实就是对象,因此可以使用delete运算符可以从数组中移除元素 var number = ['zero','one','two','three','four'] delet
阅读全文
摘要:由于数组和对象的数据同源性,导致在JavaScript编程中经常会出现:在必须数组时用了对象,在必须用对象时用了数组. typeof检测数组的类型时object,没有意义,所以这里可以通过自定义一个is_array函数来你部缺陷 var is_array = function(value){ ret
阅读全文
摘要:相对来说下面几种情况更适合switch结构 枚举表达式的值.这种枚举是可以期望的,平行逻辑关系的 表达式的值具有离散性,不具有线性的非连续的区间值 表达式的值是固定的,不是动态变化的 表达式的值是有限的,而不是无限的,一般来说表达式应该比较少 表达式的值一般为整数,字符串等类型数据 而if结构更适合
阅读全文
摘要:与循环相似,条件表达式决定JavaScript运行流的走向.和其它语言一样,JavaScript也采用了if和switch两种条件结构.由于不同浏览器针对流程控制进行了不同的优化,两者在性能上并没有特别大的差异,主要还是根据需求形式进行分析和选择:条件数量较大的,建议选择switch结构,而不是if
阅读全文
摘要:在Javascript语言中,既有function语句,也有函数表达式,这是令人困惑的.因为它们看起来是相同的.一个function语句就是一个值为一个函数的var语句的简写形式. 下面语句: function f(){} 相当于: var f = function(){} 建议使用第二种形式,因为
阅读全文
摘要:switch语句,除非明确地中断流程,否则每次条件判断后都贯穿到下一个case条件.例如 switch(expression){ case label1: statementList1 case label2 statementList2 ... default: statementList } 当
阅读全文
摘要:在JavaScript中有一些运算符能够该百年运算数自身的值,如赋值,递增,递减运算等. 例如: var a; a=1; a = (a++)+(++a)-(a++)-(++a); console.log(a) //-4 如果直观地去判断,会错误地认为返回值是0,实际上变量a在参与运算得过程中,变量a
阅读全文
摘要:递增(++)和递减(--)运算度容易形成一种不谨慎的编程风格.大多数的缓冲区溢出错误所造成的安全漏洞都是由于这种编码导致的. 当使用++ 和 -- 时,代码往往变得过于紧密,复杂和隐晦.因此,在JavaScript程序设计中不建议使用他们,从而使代码风格变得更为整洁. ++ 和 -- 运算符只能够作
阅读全文
摘要:JavaScript有两组相等运算符: 和 !==,==和!= . 和 !==这一组运算度会按照期望的方式工作.如果两个运算数类型一致且拥有相同的值,那么 返回true,而!== 返回false. == 和 != 只有在两个运算数类型一致时才会做出正确的判断,如果两个运算数是不同的类型,会试图强制转
阅读全文
摘要:NaN时IEEE 754中定义的一个特殊的数量值.他不表示一个数字,尽管下面的表达式返回的是true typeof(NaN) 'number' //true 该值可能会在试图将非数字形式的字符串转换为数字时产生,例如 + '0' //0 + 'oops' //NaN 如果NaN是数字运算中的一个运算
阅读全文