1、DOM&BOM(面向Web开发)
DOM(Document Object Model)
1、document对象:对对象的选择,对HTML文档进行写入修改
document.write(),向HTML输出字符串,可以是标签、文字。与php的echo相似
document.cookie,处理cookie的问题
Document.getElementById()\getElementByName,通过ID或者Name获得对象,类似java的findViewById
2、Anchor对象:修改链接的URL、文本、target、焦点focus
3、Event对象:对当前发生的事件进行反馈,如java中的监听器。通常是与标签中的OnXXX(),配合函数使用
OnMouseDown:event.button鼠标点击;enent.clientX鼠标坐标;shiftKey查看shift是否按下;哪个元素被点击,哪个事件发生了
OnKeyUp:键盘输入Event.KeyCode
4、Form和Input对象:更改表单里面的内容和action。验证表单、对表单内元素的动画、自动填充
Onclick按钮按下中
OnLoad加载完毕
5、Image对象:更改图像的src或者大小
6、navigator:关于浏览器的细节和资料
7、Table对象:对表格进行处理
8、Window对象:对整个web对象进行处理
window.Location,对HTML进行重定向
消息框:
alert(),显示警告对话框,’\n\折行(像C语言中的printf)
confirm(),显示确认框,有返回值
promote(),提示框,有输入框,返回值
打开窗口:window.open()
计时:setTimeOut(action,time);计时器、时钟
2、函数
函数声明,参数,返回值,调用
function myFunction()
{
document.getElementById("demo").innerHTML="My First JavaScript Function";
}
返回值
function myFunction()
{
return ("您好,祝您愉快!")
}
3、变量
弱类型语言,变量类型不需声明
var firstname;
firstname="George"
4、循环
while、Do while、for、continue、break、For in方法
For In:
var mycars = new Array()
mycars[0] = "宝马"
mycars[1] = "奔驰"
mycars[2] = "宾利"
for (x in mycars)
{
document.write(mycars[x] + "<br />")
}
5、错误处理
try catch throw三件套
try
{
if(x>10)
throw "Err1"
else if(x<0)
throw "Err2"
else if(isNaN(x))
throw "Err3"
}
catch(er)
{
if(er=="Err1")
alert("错误!该值太大!")
if(er == "Err2")
alert("错误!该值太小!")
if(er == "Err3")
alert("错误!该值不是数字!")
}
function handleErr(msg,url,l){}
setTimeOut
6、Object
默认对象:
Object
txt:big(),small(),length(),indexOf(),match(),replace()
Date:Date(),setFullYear(),getHour,getMonth
Array:for in遍历;sort();
Boolean:
0 是逻辑的 false
1 是逻辑的 true
空字符串是逻辑的 false
null 是逻辑的 false
NaN 是逻辑的 false
字符串 'false' 是逻辑的 true
Math:random();max();min();
自定义对象
JS
1、精华
DOM(文档对象模型)是浏览器中的,而JS只是去处理浏览器里面的这些对象,而由于浏览器中这些对象的规范不一致,导致很难统一处理。
脚本语言特性:
弱类型:强类型和弱类型之间的优劣,强类型可以帮助编译器在编译的时候更容易通过语法分析检查出错误。但是弱类型可以省却更多的类型转换等繁琐步骤。
对象字面量表示法:描述即声明
原型继承:与面向对象的类继承不一样
全局变量:劣势,但是采取了不同的方法去避免
语法:
循环、变量、函数、类、数组
命名法、代码风格
JSLint:JavaScript的解析器
2、语法
2.1 空白\Tab\回车
2.2 标识符
2.3 数字
javascript只有单一的一种数字类型。表示为64位浮点数,因此1和1.0是一样的。
2.4 字符串
字符串无法改变,可以通过’/‘转义字符插入字符,自带一些方法,
2.5 语句(循环语句,选择语句)
2.6 字面量(见对象字面量)
2.8 函数
js中,除了基本类型(数值、字符串、boolean)外,其他的函数,数组等都是对象。而对象的赋值是传引用而非复制对象。
3、对象字面量
对象可以包含其他对象(变量成员,对象成员,函数成员)
继承
无类别(Class-Free)
3.1 对象字面量
对象字面量就是包围在一对花括号中的零或者一个多个的“key-value”对,方便创建新对象值
3.2 检索(调用)、更新
类的点调用。
3.4 引用
对对象的传递使用的是引用(传址),而不是传递(传值)。因此修改引用值会导致整个被修改。
3.5 原型
原型对象(继承对象)(在JS中没有类这个概念,因为所有的类都已经被实体化为了对象)Object.prototype可以为该对象的原型增加成员
原型链
3.9 减少使用全局变量污染
全局变量:削弱了程序的灵活性,增加与其他库,函数,应用程序之间造成冲突的可能
4、函数
参数,返回,声明,调用,异常(try,catch,throw)
递归函数(无尾递归优化)
高级特性:闭包、模块(通过闭包和函数构建模块来减少全局变量的影响,当然,麻烦)、级联、记忆(函数优化)
js中的内存分配以函数为基础。可以认为每个函数就是一个对象,而对象会分配一个内存。而js是没有块级作用域的,也就是只要在同一个函数内部,相同的name就享用相同的内存空间。在同一个function内,namespace是相同的。
function中,使用new可以创建一个新的对象。而且该对象的成员中,除了“this.XX”的XX方法是public的以外,其他方法并不是public的。
5、继承
在基于类的语言(如C++,JAVA)类继承类。而JS是基于原型的语言,因此对象可以直接继承对象。(更何况没有类这个概念,类已经被实例化为了对象)
5.1 伪类
向基于类语言靠拢,模仿类。
5.3 原型
使用beget这个方法来继承函数
var subObj = Object.beget(parentObj);
prototype类型:设定某个对象的父类;为已经存在的对象增添方法和属性。
5.4 函数化
通过模块化解决私有类型的问题
6、数组
js中的数组其实就是仿用对象和下标进行处理。继承对象的一种伪数组。
7、正则表达式
10、优美的特性
函数是头等对象:函数是有词法作用域的闭包
基于原型继承的动态对象:无类,简化代码。继承方便
对象字面量和数组字面量:简化创建对象的步骤
ECMAScript
1、全局变量和局部变量。函数局部变量,但是如果有引用,则该局部变量不会被回收。另外,如果没有写var ,则该函数则为全局变量
2、JS除了基本类型以外,对象类型的赋值都是传引用
3、JS的DOM时间冒泡
4、function的内存分配—闭包问题
5、js的内存泄露
DOM的内存泄露:http://itindex.net/detail/19588-dom-对象-内存泄漏
6、原型—prototype
7、arguments对象
8、JS—ECMAScript(语言特性)、DOM(body,head)、BOM(window,navigator,screen,location,history—geolocation、worker、storage)