Javascript高级程序设计第二版前三章--基本数据等--笔记
时间:2010-09-04 来源:Jikey
第一章. JavaScript 简介
第二章. JavaScript在HTML中
--------今天开始跟诸位分享JavaScript高级程序设计第二版,第二遍阅读,第一章-第三章,基本数据。
JavaScript的历史就不多说,这里主要澄清一下它现在模糊而有强大的组成部分。说模糊是因为好多人对JS的真正的组成并不了解,说强大是因为这个语言的并不是像想象中的那么弱不禁风,而是非常之强大,强大到连语言创作者本身都没有想到能如此的强大。
自从1997年,javascript 1.1提交给ECMA(欧洲计算机制造商协会)以来,ECMAscript(读ek ma script)一直是被视为javascript实现的基础,浏览器开发商致力于将ECMAScript作为各自JavaScript实现的基础,也在不同程度上取得了成功。这当中傲视群雄的当属FireFox。ECMAscritp 262 已经有第四版了,但是第三版是各浏览器实现最多的一个版本。所以基本概念部分完全按照第3版定义的ECMAScript为最终标准。而实现ECMAscript的常见的有:javascript,actionscript,所以它们俩是亲兄弟。而完整的javascript则包括:核心js(ECMAScript),浏览器对象模型(BOM),文档对象模型(DOM)三部分。
在DOM实现上浏览器也各有区别:
Opera 9+ 1级,2级(几乎全部),3级(部分)
Safari 2+ 1级,2级(部分)
Chrome 0.2+ 1级,2级(部分)
Firefox 1+ 1级,2级(几乎全部),3级部分
IE5.5-7 1级(几乎全部)
第三章. 在HTML中使用JavaScript
2.1 defer属性
作用:这个属性如被添加,则表示脚本会被延迟到整个页面都解析完毕后再运行
<script defer=”defer” scr=”xxx.js”></script>
很遗憾这个属性只有ie,ff支持
2.2 <noscript>
表示当浏览器不支持JavaScript时让页面平衡的退化
<noscript>
<p>本页面需要浏览器支持(启用)JavaScript
</noscript>
第三章. 基本概念
3.1 语法:
3.1.1标识符:就是指变量、函数、属性的名字,或者函数的参数。它只能以数字,下划线,美元符号开始的,后边的组成也只能是以数字,下划线,美元符号等。也可以是ASCII或Unicode,但不推荐。
3.1.2 js区分大小写
3.1.3 js注释:跟c语言java相似
唯一的一点是在aptana工具里边,能形成像JavaDoc一样的注释。
/**
* function add
* @param {Object} a
* @param {Object} b
*/
function add(a, b){
return a+b;
}
3.1.4 语句:
可以省略分号结尾,但不推荐
3.2 关键字:
在ECMAScript里边具有特定功能的单词组合叫关键字。它用于控制语句开始和结束,或用于执行特定操作。按照规则:关键字不能用于做标识符。
break,else,new,var,case,finally等
保留字:将来留用的关键字。
abstract,int,short,byte,boolean,goto,public
3.3 变量,
变量就是存储数据的一个内存块,与其它语言不同的是js的变量可以保存任何类型的数据。
var msg;
未初始化的会保存一特殊的值:undefined
变量量如果省略var,则成为危险的全局变量
3.4.1 typeof 操作符
undefined, boolean,string,number,object,function
3.4.2 Undefined类型
这个类型只有一个值undefined
在使用变量之前未加以初始化时,这个变量的值就是undefined
3.4.3 Null类型
这个类型也只有一个值null。从逻辑角度看,null值表示一个空对象指针
如果定义的变量将来要存储对象,那最好将该变量初始化为null,这样直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用了。
undefined 派生自null
alert(null == undefined); // ouput true ==操作符出于比较的目的会转换其操作数 ===操作则不会
3.4.4 Boolean 类型
只有两个值:true 和 false 由于js区分大小写,true与True,false与False都不是一个值
3.4.5 Number类型
八进制以8为基数,(0)为始位。
十进制以10为基数,没有始位
十六进制以16为基数,(0x)为始位
1. 浮点数
浮点数计算会产生误差
0.2 + 0.3 != 0.5
浮点数最高精度是17位小数
2. 数值范围
由于内存的限制,js不能保存世上所有的值。最小值5e-324,最大值一长串,真没必须记忆。(1.797693e+308)。如果计算超过这两个值,则用Infinity(正无穷) –Infinity(负无穷)
3. NaN(Not a Number)
是一个特殊的值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。
有两个特点:
a). 与NaN的操作都会返回路径NaN
b). NaN与任何值都不相等,包括NaN本身
alert(NaN == NaN) // output false
isNaN() //这个函数帮我们确定这个参数是否“不是数值”
它接受到一个参数时,试图想转换为数值类型,转换不了则返回true
4. 数值转换:
a) Number()
可以用于任何数据类型
后两个则专门用于把字符串转换成数值
1. true 转换为1, false 转换为0
2. null 转换为0
3. 如果字符串中包含有十六进制格式,则将其转换为相同大小的十进制整数值
b) parseInt()
不会忽略前导零,会以八进制方式来解析
会自动识别八进制,十进制,十六进制
也可以提供第二个参数:转换时使用的基数(多少进制)
c) parseFloat()
忽略前导零
没有第二个参数
3.4.6 String类型
用于表示零或多个16位Unicode字符组成的字符序列。
字符串可用单引号(‘ ’),双引号(“ ”)来表示
1. 字符字面量
转义序列:\n 换行, \t 制表 \b 空格
2. 转换为字符串
a). tostring() 可以接受一个参数,表示基数
数值,布尔值,对象和字符串都有toString()方法
b). 可以使用转型函数String()
在不知道要转换的值是不是null或undefined的情况下,使用String();这个函数能将任何类型的值转换为字符串。
3.4.7 Object类型
js中的对象就是一组数据和功能的集合
a). constructor – 保存着用于创建当前对象的函数
b). hasOwnProperty(propertyName) – 用于检查给家的属性在当前对象实例中(而不是在实例的原型中)是否存在
var o = new Object(); //没有参数()可以省略
o.hasOwnProperty(‘name’);
c). isPrototypeOf(object) – 用于检查传入的对象连接是否是另一个对象的原型
d). propertyIsEnumerable(propertyName) – 用于检查给定的属性是否能够使用for-in语句来枚举。
e). toString(), valueOf()
3.5 操作符
3.5.1 一元操作符
递增递减操作符
var age = 29;
++age; //先加后使用
var anotherAge = age + 2; // 32;
age++ //先使用后加
var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2; //22
var num4 = num + num2; //21
3.5.2 位操作符
// 用的不多,等回头有空在补上
1. 按拉非
var num1 = 25 //二进制00000000000000000000000000011001
var num2 = ~num1 //二进制 11111111111111111111111111111110
alert(num2) // -26
2. 按位与 &
3. 按位或 |
4. 按位异或 ^
5. 按位左移 <<
6. 有符号右移 >>
7. 无符号右移 >>>
3.5.3 布尔操作符
1. 逻辑非 !
2. 逻辑与 &&
3. 逻辑或 ||
3.5.4 乘性操作符
1. 乘法 *
2. 除法 /
3. 求模(余数) %
3.5.5 加性操作符
3.5.6 关系操作符
a) 如果两个操作数是数值,则执行数值比较
b) 如果两个操作数是字符串,则比较两个字符串对应的字符编码值
c) 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后进行比较
d) 如果一个操作数是对象,则调用这个对象的valueOf()方法,用得到的结果按照前面的规则执行比较。如果对象没有valueOf()方法,则调用toString()方法,并用得到的结果根据前面的规则执行比较
e) 如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较
3.5.7 相等操作符
相等和不相等:先转换再比较
全等和不全等:仅比较而不转换
3.5.8 条件操作符
var max = (num1 > num2) ? num1 : num2
3.5.9 赋值操作符
var a = ‘豪情’;
3.5.10 逗号操作符
var num = (4,5,1); //num 1;
6. 操作符:
加减操作符:
var age = 29;
++age;//先加后使用
相当于age = age + 1;
var age = 29;
age++;//先使用后加
还有其它乖除等等
3.6 语句
3.6.1 if语句
3.6.2 do-while语句
在对条件表达式求值之前,循环体内的代码至少会执行一次
3.6.3 while语句
3.6.4 for语句
3.6.5 for-in语句
for-in语句是一种精准的迭代语句,用来枚举对象的属性。
for(var pro in window){
document.write(pro + ‘<br>’);
}
3.6.6 label语句
3.6.7 break,continue语句
1. break 语句会立即退出循环,强制继续执行循环后面的语句
2. continue 退出本次循环后从循环的顶部继续执行下一次循环
3.6.8 with语句
虽然能延续作用域,但是效率不高,不推荐使用
3.6.9 switch语句
3.7 函数
arguments 是一个类数组,有数组的特性,可以用下标访问,有长度,但它不是数组对象的实例。
函数没有重载,只有覆盖,不像Java,倒像css
如果定义两个相同函数的名字,只会执行后定义的函数。