JavaScript 从入门到精通

/ By: BioMooc.com / At: 2022.11 / Version: dev0.2.8

Repo: github.com/dawnEve/jsLecture

js/php熟手交流QQ群: 369578518


js包括 语言核心、DOM、BOM共3部分。

为了方便调整目录结构,根文件夹都不加数字序号。根文件夹内的文件名命名: "数字开头+字母_关键词.html"


0. debug/ 运行方式、调试、输出

js主要有三种运行方式: 行内,script标签内,单独的文件。倾向于使用最后一种,尽量不使用第一种。

进几年,nodeJS 还可以后端运行。


示例模板:
/***************************
<meta charset='utf8'>
<h1></h1>

<pre>
</pre>

<script>
//tools
function print(s){console.log(s)}

</script>
***************************/

1. base/ Core: js核心语法

引用对象:Array、Object、Function

2. 控制结构

3. 字符串 String

4. 数组 Array
	arr=[];//初始化
	arr[0]=0;//赋值
	arr.length;//数组长度

5. 对象 Object

var obj={};
new 和 this



6. Map 和 Set 

7. iterable


标准对象

8. 日期 Date
9. 正则表达式 RegExp
10. JSON 对象

2. Function/ 函数对象

函数是js的一级公民,js的强大几乎全依仗着js函数的灵活与强大。函数可以是嵌套、作为参数、作为返回值。

函数式编程现在已经火起来,并与OOP并行。

1. 函数的定义与调用
递归
2. 变量作用域与结构赋值

只有全局变量和函数体局部变量;
	只要首次出现不加var的都是全局变量:按照原型链上溯,最后添加到window对象上,就成全局变量了。

with() 严格模式下,with 被完全禁止


3. 方法

4. this 与 链式调用

5. arguments对象

6. 高阶函数
map/reduce
filter
sort
Array


7. 闭包 与 立即执行函数


8. 箭头函数

9. generator

3. OOP/ 面向对象编程

JS实现了基于原型的继承。

很难!原型链、闭包;模拟类

1. 创建对象

2. 原型继承

作用域scope、闭包closure、原型、继承、类的实现、
模块模式、沙箱模式、
单例模式、

- this的意义:当前对象本身,但是有很多意外解释//todo
- with(document){write('some text');}
- new: 创建新对象,new的时候发生了什么?


3. class 继承



几种类的实现方法: //todo all
1. minimalist.style.html  
	缺点是不节省资源,不提倡用;  
2. create.class.html  
	很好用的类定义方法,就是不知道兼容性如何  
3. single.class.html  
	js的单例模式:原型上写的属性和方法返回后失效。。。  
	也是合理的。
4. dragAndRisize:原生js图片头像截图上传_拖动图片切割头像截图上传

4. DOM/ 文档对象模型

DOM 标签,是最复杂的部分。通过控制DOM及其属性,控制css,理论上能动态创建任何网页效果。

1.dom获取、dom创建、dom属性添加、dom插入、dom删除、dom克隆
2.兼容性的处理
3.css属性获取与设定

4.其他标签
https://www.twle.cn/l/yufei/javascriptref/javascript-ref-met-video-canplaytype.html

5. BOM/ 浏览器对象模型

浏览器的操作主要是:新窗口,location,history等。是基本不兼容性的,好在现在主流是chrome内核。

1. 原生交互
alert:弹出警告等信息;
prompt:输入框,第一个参数是提示语句,第二个是默认值;
confirm:确认框,很有用:你确认要删除吗?


2.window
	- 当前窗口
	- 新开窗口
	- 通过本地窗口控制新开的窗口: 2秒后关闭
	不过现在不常用了,因为被流氓网站用烂了。


6.本地存储 localStorage

浏览器嗅探,确定浏览器的能力。

6. Event/ 事件处理

xx

1.事件基础
(1)事件监听与绑定、取消绑定
https://zhuanlan.zhihu.com/p/29443137


(2)阻止冒泡 阻止默认事件

js事件之event.preventDefault()与event.stopPropagation()用法区别
http://www.111cn.net/wy/js-ajax/47345.htm

js中的preventDefault与stopPropagation详解
http://www.jb51.net/article/46379.htm

(3)事件委托 delegate





2.鼠标事件

js中鼠标滚轮事件详解
http://www.cnblogs.com/walkingp/archive/2010/02/03/1662872.html

js鼠标滑轮滚动事件绑定(兼容主流浏览器)
http://qiaolevip.iteye.com/blog/1673396

3.键盘事件


4.表单事件
	onsubmit:表单提交之前,可做数据验证
	js表单验证
	1) 常规的是判断并弹出提示;
	2) 毕向东Html、CSS、JavaScript视频教程
		[1]保留 java怎么接收form的消息
		[2] 给form加label的好处:【不大实用】
			1.accessKey指定快捷键,需要配合alt键使用;
			2.label的for属性指向input的id属性,可以使input快速获取焦点

	操作文件
	File API




5.自定义事件与主动触发事件 trigger or fire

7. AJAX/ js数据交互-ajax/json/Promise

xx

1.更有好的方式是避免弹窗,在末尾显示红色提示文字;
		获得obj,在innerHTML中加入文字提示;
2.ajax

XHR、json、

8. canvas_SVG/ 可视化 Canvas 与 SVG

网页画图主要靠 canvas 和 SVG。

9. Animation/ 定时器与动画

xx


定时器、动画(链式运动、跳跃运动、)

1.产生动画的2个函数
setTimeOut('', 1000)
setInterval('', 2000)




2.时间
	var today=new Date();
	//Tue Nov 24 2015 16:41:42 GMT+0800 (中国标准时间)
	//获取小时
	var h=today.getHours();//16


3.js游戏控制
http://www.cnblogs.com/ljchow/archive/2010/06/10/1755182.html#xyqTTT
其博客列表:http://www.cnblogs.com/ljchow/default.html?page=2



0.学习方法:看API、看书、做练习

趣味代码:
	- 黑客帝国
	- 鼠标跟随
	- 找相同图片
	- 漂浮的云
	- 打字效果
	- 石头剪刀布
	- 星球大战

读书进步快:读英文书
	- 看目录
	- 看例子代码

推荐的书
	- javascript programmer's reference
	- professional javascript for web developers

10. Library 类库的学习: jQuery/, Vue3/, underscore/

常见类库还是要学习的,甚至有必要看看源码。

在 /lib/ 下的主要是为了引用,学习笔记则在各自的一级目录下,比如 jQuery/。

目前有一个例外,就是 /lib/js/, /lib/JStest/,目前是自己的 js 函数库。

jQuery
	- 选择器
	- 操作DOM
		事件
		动画
		AJAX
		扩展

underscore
	Collection
	Arrays
	Functions
	Objects
	Chaining

11. err/ 错误/异常处理

try...catch...finally 语句。

1.错误处理

2. 错误传播

3. 异步错误处理

12. nodeJS/ 后端运行的js

xx

xx

13. ES6/ JS 新标准

xx

xx

14. design/ 设计模式

xx

xx

n. example/ 综合练习

xx

要做成简单的效果,满足要求并简练是最好的效果。

-[1]ok 下拉换头像usefull->userPic.html
-[2] 2/3级联动列表:onchange事件
-[3] 侧边滑动式菜单:onouseover滑动出来
-[4] 抽屉式菜单
-[5]ok 日历效果。插件式,点击获取oop_part->calender->calender.html
	5.1梅花雨日历控件:demo失败,不能用。
-[6] 模拟alert的弹出层:httphttp://www.cnblogs.com/NNUF/archive/2012/04/26/2471120.html

延迟加载的原理:
http://www.daxueit.com/article/3777.html
http://www.cnblogs.com/NNUF/archive/2012/06/25/2561570.html

-[7] 判断:是否为数字,是否为字符,是否为邮箱
-[8] 树结构 treeview.js,接口简单,写着困难。

js 资料

http://bonsaiden.github.io/JavaScript-Garden/zh/