@windchimes
2016-04-08T02:31:41.000000Z
字数 1979
阅读 281
js
ES6之前js并没有真正的常量的概念,但是有时候会需要常量的存在,建议使用“大写字母和下划线”来命名
单双引号:单引号中间可以直接使用双引号,但是双引号中间若要再次使用双引号,则需要进行转义\"
null和undefined的区别:使用了可能赋值为对象的变量时,将其赋值为null
最好禁止使用特殊值undefined
对象和数组使用直接量:var numbers = [1,2,3,4]
switch语句:js中的switch语句可以使用任意类型值,任何表达式都可合法的用于case语句
with语句可以更改包含的上下文解析变量的方式
var book = {
title:"javascript",
author:"zakas"
}
var message = "the book is";
with(book) {
message += title;
message += "by" + author;
}
在严格模式中,with语句是被明确禁止的,所以应尽量避免使用with
for 循环用于遍历数组成员 更改循环的执行过程有两种方法:continue break (尽量少使用continue,JSLint会给出警告)
for-in 循环 用来遍历对象属性,返回的是属性名而不是值(是key而不是value),而且for-in循环会遍历从原型继承来的属性,所以最好使用hasOwnProperty()方法来为for-in循环过滤出实例属性
问题:在《编写可维护的javascript》一书中,建议合并var语句,可以让代码更短、下载更快 p44,可是在上次看过的es5 code style中,特地强调了var语句不要合并,最好每行写var,尽量不合并var语句
http://www.jb51.net/article/63336.htm
教程的优化方法:
for(var i=0;var length = items.length; i < length; i++) 作用域
避免使用with语句
避免全局查找
== !=会涉及到强制类型转换,所以尽量使用 === !==来进行判断
null == undefined =>true
null === undefined =>false
原始包装类型:没看懂
来自函数外部的数据应当以参数形式传进来,这样可以将函数和其外部环境隔离
不要让函数对全局变量有依赖
避免意外出现的全局变量 var foo = 1; count = 10 count是全局的变量 foo =10;foo也是全局的变量
事件处理
处理事件时,最好让事件处理程序成为接触到event对象的唯一函数,事件处理程序应当在进入应用逻辑之前针对event对象执行任何必要的操作,包括阻止默认事件或阻止事件冒泡
扩展:http://blog.163.com/wangzhengquan85@126/blog/static/36082995201011812341235/
http://zhidao.baidu.com/link?url=RmwxVKU0WhX1YZ4lWjRdDuovdaMAS0y7dYTEFSUrFT_0WvfMIUYFd9q5ytIQUGijJKwu4QxVx99raRJX3yYYja
重新复习了一遍attachEvent(onclick)、addEventListener(click) 前者是IE浏览器两个参数;后者是W3C标准,FF chrom等三个参数,第三个参数是boolean true:捕获 false:冒泡
var myapplication = {
//应用逻辑程序
handleClick: function(event) {
event.preventDefault();
event.stopPropagation();
//传入应用逻辑
this.show(event.clientX,evetn.clientY);
},
//应用逻辑程序
show: function(x,y) {
//do something
}
};
addEventListener(element,'click',function() { // do something})
};
js5种基本类型:字符串、数字、布尔值、null、undefined
判断基本类型可以使用typeof
除了基本类型之外的都是引用,检测引用值的类型的最好方法是使用instanceof运算符
value instanceof constructor
检测函数最好的方法是使用typeof方法,因为它能跨帧使用(在IE8及更早的版本中,检测DOM节点返回object而不是function)
检测数组:isArray()方法
function isArray() {
return Object.prototype.toString.call(value) === "[object Array]"
}