注:笔记中的页码均对应pdf电子书中的数字页码,非纸书中的实际页码
javascript 中 函数也可以作为一个对象
两个名词:
BOM(Browser object model) 浏览器对象模型
DOM(Document object model) 文档对象模型
变量的定义:
利用var定义局部变量,只能在定义的函数内部使用。如果去掉关键字var,变量就变成全局变量
(尽量少用全局变量,命名重复时会很麻烦)
数据类型:
松散类型:同一个程序中,相同的变量可以保存不同的数据类型
数据类型:
字符串(用单引号 或 双引号 都可以)
数字(可以是十进制的浮点数,科学计数法的数值、也可以是十六进制数)
布尔
(每种基本数据类型 会 对应一种内建对象,带有各自的属性和方法)
双重否定符:!! 可以显式地将非boolean类型的变量转换为布尔值
如: var strName = "Someletters"
var boolName = !!strName //这个变量的值将是 true
常量的定义,用关键字const : const NAME = "Someletters" NAME 就不再是一个变量,不能再赋值
常量尽可能是全局常量,且命名用全部字母大写
在javascript中,3/2的计算结果不取整,而是1.5的浮点数
弱类型的体现:
如果只是判断值得相等 ,只需要用两个等号,不需要转换数据类型,例:3==3 和 3==“3” 是等效的
如果要判断的数据的值和类型都相同,则需要用三个等号,例:3===“3” 则是错的,返回false
同理,用 != 表示不相等,而用 !== 表示不相同
同理,大于、小于、等的关系操作符也会自动进行类型的转换再进行比较。仅限引号内部是数字时
注意:当操作符是 + 号时,如果+前出现的是字符串,则会把数字变为字符串再拼接,与java一致!
流控制:
在javascript中:
switch(变量){
case xx:
} //其中的变量可以是字符串类型
**提高程序性能:
逻辑判断遵循 最短路径 的原理,所以编写程序的时候,碰到与 或 语句时,第一个判断式有讲究。
例如,通常将判断变量是否为空作为 逻辑判断的 第一个表达式 p75
基本类型的对象:
1. var myName = "Someletters"; //隐式地创建一个String对象,用完后销毁
2. var myName = new String("Someletters"); //显式地创建String对象
以上两种方法下,myName可以调用String内建对象自带的方法
Boolean对象可以用数字 1 或 0 来初始化,如:
Boolean flag = new Boolean(0) 等价于 Boolean flag = new Boolean(false)
也可以用字符串来对Boolean对象初始化(空字符串等价于false,非空则为true),如:
Boolean flag = new Boolean("false") 等价于 Boolean flag = new Boolean(true)
3. 关于数字对象 Number及其方法,如:数字格式(保留几位小数)、数字进制转换 参见 P88
4. 字符串对象 可以通过 split 方法来分割,返回得到一个数组
日期对象:
可以通过格式正确的字符串来 创建日期对象,如:
var newDate = new Date(“March 12,1992 12:20:01”);
var newDate = new Date(‘March 12 1992’);
三个静态方法:Date.now(当前日期和时间) Date.parse(毫秒数) Date.UTC(将日期转为毫秒数) P102
函数:
Javascript中的函数可以像 对象一样使用,如将其输出、赋值给某个变量或数组、作为参数去传递
javascript函数类型:
显示声明的函数
匿名函数
浏览器调试:
Firebug调试:step over单步执行时,遇到有子函数的函数时,不进入子函数
step into单步执行时,遇见子函数就进入子函数继续执行
step out 单步执行时,执行完该函数中余下代码并返回上一层函数
要在控制台输出时:使用console.log(“输出内容”);如果输出内容含有变量值,要用占位符
%s(字符串) 或 %d(数字),如:
function helloworld(){
var msg = "Hello,World";
console.log("%s",msg);
}
对象:
最上层:window 然后:document、history、navigator、location、screen、frames
location中有一个 计时器对象 (timer):
一次性的计时器:setTimeout(”函数名”,时间长度);
周期性计时器:setInterval(”函数名”,时间长度)
navigator对象可以用来检查cookie是否启用,或者了解用户是用什么浏览器访问页面的
document对象:
<a>
标签,拥有href属性时,是一个超链接;拥有name属性时,则是一个anchor(锚)
在html页面中,可以直接通过标签访问对象。如:
var img = document.img[0];//表示获取该页面中的第一张图片对象
动态页面:
两个单词的区分:Property和Attributes都是属性的意思;
Property通常指对象、类的属性;
Attribute通常指页面元素的属性;
JavaScript中使用CSS属性名和样式表中的属性名通常是一样的,但需要注意:
① css中有连字符的属性,要去掉连字符并且第二个单词大写;
如:border-radius则变为 borderRadius;
② float在IE中变成 styleFloat;其他浏览器中变为cssFloat;
JavaScript自定义对象:
1. JavaScript对象并不遵循传统面向对象语言的 类和继承规则,本质是面向 原型(Prototype);
2. JavaScript为所有对象提供一个prototype属性,该属性可以用来给对象添加属性和方法,从而扩展对象;P291
*. 面向对象的思想中的封装,作用:方便传递值;隐藏实现细节;
3. 用prototype属性扩展对象,然后封装起来。这就是JS组件(如:AJAX)的基本原理
4. 在JavaScript中,函数也是一个对象,因此:function tune(){} //这段代码可以看做是创建了一个壳对象
5. JavaScript的对对象的封装有一个重要的作用是:解决浏览器兼容问题;如Ajax,它们在页面载入(对象创建)
时,就检查浏览器兼容问题,而代组件调用者无需知道怎么检查的;
6. 页面元素可以 赋值 给新建对象的一个内部成员变量,以此来操纵修改该页面元素的属性或样式;P303
7. 通过var关键字声明的成员是私有成员,用this关键字声明的成员则为公共的;
JavaScript中对像的继承(构造函数链):
1. apply:语法是 在对象A的构造函数中写:对象B.apply(this,arguments);则对象B就成为了对象A的一个属性
2. call p307
JavaScript也可以使用try-catch(finally)来做异常处理;
JavaScript沙箱的概念:JavaScript不能访问或修改本地系统文件;
Ajax:
原理:在同一个Web页面文档中完成:向服务器发出请求,调用一个服务,然后返回数据;
实现客户端和服务器端的异步通信。它与传统的表单提交的区别是:无需重新载入页面;
XMLHttpRequest对象
Json:
轻量级的数据交换格式
只支持双引号