JavaScript权威指南之学习笔记第六版.doc
《JavaScript权威指南之学习笔记第六版.doc》由会员分享,可在线阅读,更多相关《JavaScript权威指南之学习笔记第六版.doc(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、JavaScript权威指南之学习笔记(第六版)核心笔记一、说明JS权威指南文字用红色标出;JS高级程序设计用橙色标出;自己加上文字用粉红色标出;其(一)-(九)为JS权指南,(十)为JS高级程序设计 二、记法结构2.1字符集Javascript程序用是Unicode字符集编码。2.2大小写敏感Javascript是一种区分大小写语言,但是注意HTML是不区分大小写(尽管XHTML区分大小写)。也即在HTML中这些标记和属性名可以任意大小写方式输入,但是在Javascript中它们通常都是小写。2.4可选分号尽管理论上说来JS允许在任意两个标识符之间放置换行符,但是实际上JS会自动插入分号。例
2、:ReturnTrue;JS会假定你意图是:Return;True;2.7标识符第一个字母必须是字母、下划线或美元符号($)!三、数据类型和值3.1数字Javascript不区整型值和浮点型数值。在Javascript中,所有数字都是由浮点型表示。3.1.1,3.1.2整型直接量、八进制和十六进制直接量十六进制直接量是以”0x”或”0X”开头,而八进制是以数字0开头。在ECMAScript标准中不支持八进制直接量,但是Javascript某些实现是允许八进制格式整型直接量。所以一般最好不要使用以0开头整型直接量。3.1.3浮点直接量例如3.14234.342.3424242.32e231.23
3、424E-323.1.6特殊数值当一个算术运算(如0除0)产生了未定义结果或错误时,就会返回一个特殊非数字值,为NaN。这个数字值和任何数值都不相等,包括它自己在内,所以需要一个专门数字来检测IsNaN()来检测这个值。特殊数值常量NAN Infinity 无穷大Number.MAX_VALUENumber.MIN_VALUENumber.NaNNumber.POSITIVE_INFIITYNumber.NEGATIVE_INFITY这是特殊常量都是在运算时可能产生,用IsNaN()或isFinite()等函数来检测。3.2字符串3.2.1字符串直接量字符串是由单引号或双引号括起来Unicod
4、e字符.在单引号可以含有双引号,双引号可以含有单引号。3.2.2字符串直接量中转义序列0 b t n r v f ” uXXXX(四位十六进制Unicode字符)xXX由两位十六进制指定latin-1字符3.2.3字符串使用可以用(+)来连接字符串。3.2.4数字转换为字符串Var number=100;Var s=number.toString();还可以指定转换基数,Var s=number.toString(16);还有三个函数可以精确指定转换后数字格式,toFixed(),toExponential(),toPrecision(); 3.2.5字符串转换为数字当把一个字符串用于数字环境
5、中,它也会自动地转换为一个数字,Var t=”21” * “2”;利用这一优点,只要把一个字符串减去0就可以将其转换为一个数字。Var t=string_value-0;ParseInt()和ParseFloat(),这两个函数可以从字符串开始处转换和返回任何数字,忽略或舍去非数字部分。ParseInt()甚至可以接受另一个参数来指定要解析数字基数。合法范围在2至36之间。ParseInt(“012”,2);ParseInt(“0x23”);/默认返回10进制这两个函数不能把指定字符串转换为数字,它们会返回NaN.ParseInt(“ele”);/返回NaN3.7NullNull被看作对象类型
6、一个特殊值,即代表“无对象”值。3.8undefined使用了已经声明但还没有赋值变量时,又或者使用了一个并不存在对象属性时,返回就是这个值。注意这个特殊undefined值不同于null。但是=运算符却将两者相等。3.11Error对象当运行发生错误时,Js会抛出某个类对象。3.12类型转换小结不同值在不同环境运行时所转换成值值字符串数字布尔对象未定义值“undefined”NaNfalseErrorNull“null”0falseError非空字符串不变字符串中数字值或NaNtrueString空字符串不变0falseString0“0”不变falseNumberNaN“NaN”不变fal
7、seNumber无穷“InFinity”不变trueNumber负无穷“-InFinity”不变trueNumber任意其他数字数字字符串值 不变trueNumberTrue“true”1不变BooleanFalse“false”0不变Boolean对象toString()valueOf(),toString(),或NaN true 不变注:对于对象转换,当在一个数字环境时JS首先调用该对象ValueOf()方法,如果这个方法返回一个基本类型值,这个值会被使用,然而在大多数情况下,valueOf()方法返回是对象自己,在这种情况下,JS先使用toString()方法把对象转换为一个字符串,然后
8、再试图把该字符串转换为一个数字。3.13,3.14基本数据类型包装对象跟C#或JAVA里包装对象是一样,比如用一个字符串变量时使用了一个字符串对象方法或属性,JS会为这个字符串值内部创建一个String包装对象.String对象替代了原始字符串值。注意,这个对象中只是瞬时存在,在用完以后就没有用了,系统会把它丢弃。Var s=”asdf”;Var len=s.length;/用长度属性。注意:JS中函数方法call(),apply(),可能还有其它方法能被字符串常量,数字,布尔类型甚至null,undfined调用,为什么?因为包装对象啊!在这两个函数里面需要对象所以就把常量包装成对象了来调用
9、对象,用完就丢掉!jQuery中each方法循环对象属性时就是用这个特性。3.15传值和传址基本类型为Null,Undefinded,布尔型,数字。引用类型为数组、函数、对象。JS字符串是通过传址来复制和传递,而它们是通过传值来比较。可以说是既能是基本类型又是引用类型!四、变量4.1变量类型JS是非类型,也即变量可以存放任意类型值。4.2变量声明重复声明和遗漏声明可以使用VAR语句重复声明一个变量不仅是合法,而且也不会造成任何错误。如果尝试读一个未声明变量值,JS会生成一个错误。如果尝试给一个用VAR语句变量赋值,JS会隐式声明这个变量,但注意,隐式声明变量总是被创建一个全局变量,即使该变量只
10、是一个函数体内使用。4.3变量作用域如果一个局部变量或函数参数声明名字与某个全局变量名字相同,那么就有效地隐藏了这个全局变量。局部变量必须是用var语句,否则就是全局变量了。4.3.1没有块级作用域JS中没有块级作用域概念,函数中声明所有变量无论是在哪里声明,在整个函数中它们都是有定义。实际这个说法对全局变量也是起作用,例Var scope=”global”Function f()Alert(scope);/displays “undefined”,not globalVar scope=”local”;Alert(scope);/displays “local”F();局部变量在整个函数体内
11、部都是有定义,这就意味着在整个函数体中会隐藏了同名全局变量。虽然局部变量在整个函数体中是有定义,但是在执行var语句之前,它是不会被初始化。这个例子说明了把有变量集中起来放置在函数开头是一个好编程习惯。4.3.2未定义变量和未赋值变量未定义变量就是没有被告声明过,无论是显示声明不是隐式声明,读取这样变量会出错.未赋值变量是虽已经声明了,但是没有给它赋值!4.6作为属性变量4.6.1全局对象JS解释器开始运行时,它首先要做事情之一就是在执行任何JS代码之前,创建一个全局对象,这个对象属性就是JS程序全局变量。当声明一个JS全局变量或函数时,实际上所做是定义了那全局对象一个属性。或者说用一个同名属
12、性来存储全局变量和全局函数。此外,JS解释器还会用预定义值和函数来初始化全局对象许多属性,如Infinity,parseInt,Math分别引用了数值infinity,预定义函数ParseInt()和预定义对象Math.在程序顶层代码(不是函数中代码)可以用this关键字来引用这个全局对象。在客户端JS中,Window对象代表浏览器窗口,它是包含在该窗口中所有JS代码全局对象,这个全局对象具有自我引用window属性,它代替了this属性,可以用来引用全局对象。4.6.2局部变量: 调用对象内嵌函数、函数参数和局部变量是调用对象属性。调用对象是在函数运行时创建!一般用完就释放,除非产生了闭包!
13、4.7深入理解变量作用域在JS顶层代码中,作用域链只由一个对象构成,那就是全局对象。所有变量都是在这一对象中查询。如果一个变量存在,那么这个变量值就是未定义。在一个函数(非嵌套)中,作用域链由两个对象构成,第一个函数调用对象,第二个就是全局对象。当函数引用一个变量时,首先检查是调用对象,其次才检查全局对象。在嵌套函数作用域链中可以后在三个或更多对象,查找方式以此类推。以上所说也就是一个函数在运行时候查询变量情况流程!这在闭包中也是这样一个查找过程!五、表达式和运算符5.3算术运算符1.除法运算符在js中,由于所有数字都是浮点型,所以除法结果也是浮点型(不像C+或C#中那种除出来是整形!),除数
14、是0结果为正无穷大或负无穷,而0/0结果则是NaN.2.模运算符取模操作运算数通常都是整数,但它也适用于浮点数,如-4.3%2.1=-0.1;除了加号比较特殊外,其它减、除、模、一元减(-)、一元加(-)、递增运算符(+)、递减运算符(-)都会把非数字变成数字!5.4相等运算符5.4.1相等运算符和等同运算符判定=运算符比较两个值是否相等。如果两个值具有相同类型,那么就检测它们等同性。如果两个值类型不同,它们仍然可能相等,用下面规则和类型转换来检测它们相等性。(数字有最高优先级)1)如果一个值是Null,另一个值是Undefined,则它们相等。2)如果一个值是字符串,另一个值是数字,那么字符
15、串先转化为数字再进行比较3)如果一个值是布尔值,另一个值为数字或字符串,布尔值和字符串都先转化为数字再进行比较,true为1,false为0.4)如果一个值是对象,别一个是数字或字符串,则对象转换为相应原始类型值。5)其它组合值不等。5.5关系运算符5.5.1比较运算符(,)这些比较运算符运算数可以是任意类型。但是比较运算只能在数字和字符串上执行,所以不是数字或字符串运算数将被转换为数字或字符串。1) 字符串和数字比较,转换为数字再进行比较。2)操作数不能转换为数字或字符串时,比较结果为false。3)若一个操作数为NAN或转换为了NAN,比较结果为false。5.5.2In运算符In运算符要
16、求左边运算数是一个字符串,或可以被转换为字符串,右边运算数是一个对象或数组或函数。如果该运算符左边值是其右边对象一个属性名,它返回true。例Var point=x:1,y:2;Var has_x_record=”x” in point;/return trueVar has_z_record=”z” in point;/return false函数之所以可以由此运算符来检测属性,因为函数也可以有属性,并且本身就是特殊对象(或叫类更好些),所以由推开去,很多对象有功能,函数和数组也有5.5.3instanceof运算符(跟C#is关键字类似)Instanceof运算符要求左边运算数是一个对象,
17、右边运算数是对象类型名字。注意,所有对象都是类object类实例。例:Var d=new Date();d instanceof Date;/return trued instanceof Object;/return trued instanceof Number/return falsevar a=1,2,3;a instanceof Array;/return truea instanceof Object;/return true5.6字符串运算符字符串算符“+“中,字符串优先级最高。如:1+”2”=”12”,”2”+1=”21”.5.7逻辑运算符5.7.1逻辑与运算符(&)先计算左边
18、表达式值,如果左边表达式值可以转换为false,那么返回是左边表达式值,否则,它将计算右边表达式值,并且返回这个表达式值。5.7.2逻辑或运算符(|)原理同逻辑与运算符,先计算左边表达式值,如果左边表达式值可以转换为true,则返回这个表达式值,否则,它将计算右边表达式值,并且返回该表达式值。5.7.3逻辑非运算符(!)在对操作数取反之前,!运算符先把它运算数转换为一个布尔类型值,这意味着,对任何值x应用两次运算符(即!x)都可以将它转换成一个布尔值。第一次为了使操作数在布尔环境中取得操作数相反布尔值,而第二次就是使取得操作数正确布尔值!5.10其它运算符5.10.2typeof运算符(与C#
19、typeof()运算符一样)它测试一个操作数,返回一个字符串来表式一个操作数类型。对数字、字符串或布尔值,返回”number”、”string“、”boolean”,而对数组、对象和Null,它返回是”object”,而对函数运算数,返回是”function”,如果运算数是未定义,它将返回”Undefined”.5.10.4delete运算符它将删除运数所指定对象属性、数组元素或变量或函数属性。如果删除成功返回true,若不能删除,返回false。并非所有属性和变量都是可以删除,某些内部核心和客户端属性不能删除,用var语句声明用户定义变量也不能被删除。注意,删除属性、变量(数组不一样)不只是
20、把它们值设置为undefined,当删除它们后,它们全部变成未定义,也即不存在,再次尝试读取它们时会出错。Delete所能影响只是属性值,并不能影响被这些属性引用对象,即这些对象只要用其它属性引用就还存在!5.10.5void运算符它可以出现在任何类型操作数之前,它总是舍弃运算数值,然后返回undefined.这种运算符通常用在客户端javascript:Url中,在这里可以计算表式值,但是不会显示出这个值。open a widnow六、语句6.1switch语句ECMAScript v3标准允许case 语句扣跟随任意表达式。例如:Case 60*60:Case Math.pi;Case n
21、+1;注意:由于匹配case表达式是用=等同运算符判定,而不是用=运算符判定,所以表达式必须在没有类型转换情况下进行匹配。6.9for/in语句For(variable in object)statementVariable应该是一个变量名,声明一个变量var语句,数组一个元素或者是对象一个属性。Object是一个对象名。在循环体执行之前,对象一个属性名会被作为字符串赋给变量variable。在循环体中可以使用这个变量和运算符查询该对象属性值。注意,for/in循环中variable可以是任意表达式,只要它们值适用于赋值表达式左边即可。JS数组是一种特殊对象,因此可以像循环对象属性那样枚举数组
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavaScript 权威 指南 学习 笔记 第六
限制150内