笔记记录
行的长度
单行代码不能超过80个字符。
命名
Camel Case 小驼峰式大小写,> Pascal Case 大驼峰式大小写,以大写字母开始。
函数和变量
名词作为前缀变量名,动词作为前缀为函数名(can ,has, is ,get ,set)。
构造函数
命名是名词,大写开头。
null
不能用作判断在函数里面是否传入了参数。 将变量初始赋值为null,最终可能赋值为对象,所以typeof null 返回的是 object
var person;
if(person != null) // 不好的写法,用来和未初始化的变量比较.
function doSomething(arg1,arg2){
if(arg2 !=null){ // 不好的写法,检测是否传入了参数
}
}
块语句
所有块语句 都应当使用 花括号。if for while do,,,while... try....cathch....finally
case 语句的连续执行
case都应当 以 break ,return,或者throw 做结尾。
case "first":
case "second":
// 代码
break;
for
尽量少用continue。 for in 遍历对象的实例属性,还遍历原型继承来的属性,最好使用hasOwnProperty()方法过,滤出实例属性。 for in 错误用法 是遍历 数组。
变量声明
推荐使用var合并语句,代码更短,下载更快。
严格模式
“use strict” 最好不要在全局作用域中使用。
相等判断
都应当使用=== , !== 因为不会发生强转。
eval()
参数是字符串,当作代码来执行。eval(“alert(‘hi’)”); 将弹出hi,别无它法才使用,严个模式下无法调用函数所在的上下文生命的变量或者函数,setTimeout()和setInterval()不要用字符串显示传参。
js中提取css,css中提取js
在css中不要写css表达式,性能问题。 在js中不应当直接操作样式,以便保持和css的松耦合,定义桥梁,className类型名
单全局变量
单全局变量的意思是所创建的这个唯一全局对象名是独一无二的,所有的功能代码都挂载到这个全局对象上。
命名空间
是简单的通过全局对象的单一属性表示的功能性分组。
var zakasBook ={};
zakasBook.mainPropty={};
零全局变量
使用一个立即执行的函数调用并将所有脚本放置其中,使用场景:脚本非常短,不需要与其他代码产生交互。
事件处理
当事件触发时候,事件对象event对象会作为回调参数出啊如事件处理程序中。 1隔离应用逻辑 2不要分发事件对象event,只需要其中的对象,可以传给应用逻辑的时候代替。例如 event.clientX。
避免空比较
typeof是一个运算符而不是函数,推荐无括号,他是检测函数的最佳选择。
typeof ads === ‘function’
instanceof检查引用值的类型 date array Error Object
value instanceof Date
判断属性是否存在的最好的方法是使用in运算符
if(’count’ in object)
配置数据从代码中分离出来,简单理解就是环境变量。
错误类型有7种,所有错误类型都继承Error。
用try catch,和throw处理错误。
对象不能随便动(原生,Bom,Dom,类库对象)
不覆盖方法,不新增方法,不删除方法。 一般使用继承方式对对象进行扩充。
基于对象的继承
叫原型继承,Object.create(某个对象,第二个参数),第二个参数对象中的属性和方法将添加到新的对象中。
基于类型的继承
是通过构造函数实现的,而非对象。需要访问被继承对象的构造函数。 首先,原型继承,然后构造器继承:调用超类的构造函数时传入新建的对象作为其this的值。
阻止修改
Object.preventExtension(对象)锁定对象。 Object.isExtensible(封锁的对象) === false; Object.seal()函数来密封一个对象,Object.freeze()函数来冻结一个对象。
浏览器特性检测
比如检测document.getElementById()存在?不存在就判断doument.all()存在。
避免特性推断,避免浏览器推断。
尽可能的使用特性检测,其次是用户代理检测,永远不要使用浏览器推断。