JavaScript学习笔记(高级部分—01)
- JavaScript的核心ECMAScript描述了该语言的语法和基本对象;DOM描述了处理网页内容的方法和接口;BOM描述了与浏览器进行交互的方法和接口。
- 简单说,ECMAScript描述了以下内容:1.语法 2.类型 3.语句 4.关键字 5.保留字 6.运算符 7.对象。ECMAScript仅仅是一个描述,定义了脚本语言的所有属性、方法和对象。
- DOM(文档对象模型)将把整个页面规划成节点层级构成的文档。
- BOM主要处理浏览器窗口和框架,不过通常浏览器特定的JavaScript扩展被看做BOM的一部分,这些扩展包括:弹出新的浏览器窗口;移动、关闭浏览器窗口和框架以及调整窗口大小;提供web浏览器详细信息的定位对象;提供用户屏幕分辨率详细信息的屏幕对象;对cookie的支持;IE扩展了BOM,加入了ActiveXObject类,可以通过JavaScript实例化ActiveX对象。
- ECMAScript语法:区分大小写;定义变量只用var运算符;注释与java语言的注释相同;括号表示代码块。
- 变量名需要遵守两条简单的规则:1.第一个字符必须是字母、下划线(_)或美元符号 2.余下的字符可以是下划线、美元符号或任何字母或数字字符
- 在ECMAScript中,变量可以存在两种类型的值,即原始值和引用值。原始值:存储在栈中建档数据段,也就是说,他们的值直接存储在变量访问的位置。 引用值:存储在堆中的对象,也就是说,存储在变量处的值是一个指针,指向存储对象的内存处。
- ECMAScript有5种原始类型,即Undefined、null、Boolean、Number和String
- typeof运算符有一个参数,即要检查的变量或值。对变量或值调用 typeof 运算符将返回下列值之一:undefined - 如果变量是 Undefined 类型的;boolean - 如果变量是 Boolean 类型的;number - 如果变量是 Number 类型的;string - 如果变量是 String 类型的; object - 如果变量是一种引用类型或 Null 类型的
- undefined类型只有一个值,即undefined,当声明的变量未初始化时,该变量默认值是undefined。
- 另一种只有一个值的类型是null,它只有一个专用值null,即它的字面量,值undefined实际上是从值null衍生来的,因此ECMAScript把它们定义为相等的。
- Boolean 类型是 ECMAScript 中最常用的类型之一。它有两个值 true 和 false (即两个 Boolean 字面量)。
- ECMA-262 中定义的最特殊的类型是 Number 类型。这种类型既可以表示 32 位的整数,还可以表示 64 位的浮点数。整数也可以被表示为八进制(以 8 为底)或十六进制(以 16 为底)的字面量。八进制字面量的首数字必须是 0,其后的数字可以是任何八进制数字(0-7) 要创建十六进制的字面量,首位数字必须为 0,后面接字母 x,然后是任意的十六进制数字(0 到 9 和 A 到 F)。这些字母可以是大写的,也可以是小写的。
- 浮点数:要定义浮点值,必须包括小数点和小数点后的一位数字(例如,用 1.0 而不是 1)。这被看作浮点数字面量。对于浮点字面量的有趣之处在于,用它进行计算前,真正存储的是字符串。
- 科学计数法:对于非常大或非常小的数,可以用科学计数法表示浮点数,可以把一个数表示为数字(包括十进制数字)加 e(或 E),后面加乘以 10 的倍数。
- String类型的独特之处在于,它是唯一没有固定大小的原始类型,可以用字符串存储0或更多的Unicode字符,有16位证书表示(Unicode是一种国际字符集)
- ECMAScript类型转换:3中主要的原始类型Boolean值、数字和字符串逗游toString()方法,可以把它们的值转换成字符串
- Number类型的toString()方法比较特殊,它有两种模式,即默认模式和基模式。采用默认模式,toString()方法只是用相应的字符串输出数字值。采用基模式,可以用不同的基输出数字,例如二进制的基是2,八进制的基是8,十六进制的基是16.
var iNum = 10;
alert(iNum.toString(2)); //输出 "1010"
alert(iNum.toString(8)); //输出 "12"
alert(iNum.toString(16)); //输出 "A"
- 转换成数字:ECMAScript提供了两种把非数字的原始值转换成数字的方法,即parseInt()和parseFloat() 前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这些方法,它们才能正常运行;对其他类型返回的都是NaN
- ParseInt()方法还有基模式,可以把二进制、八进制、十六进制或其他任意进制的字符串转换成整数,基是由parseInt()方法的第二个参数指定的。var iNum1 = parseInt("AF", 16);
- 对于parseFloat()方法来说,第一个出现的小数点是有效字符,如果有两个小数点,第二个小数点将被看做无效的。ParseFloat()方法会把这个小数点之前的字符转换成数字,parseFloat()方法没有基模式。
- 强制类型转换:ECMAScript中可用的3种强制类型转换如下:1.Boolean(value) 2.Number(value) 3.String(value)
- 引用类型通常叫做类 var o=new Object() Object对象本身用处不大,ECMAScript中所有对象都是由这个对象继承而来,Object对象中的所有属性和方法都会出现在其他对象中。
- Object对象具有的常见方法:1.toString() 返回对象的原始字符串表示。 2.valueOf() 返回适合该对象的原始值。
- Number对象 var n=new Number(68); 要得到数字对象的Number原始值,只需要使用valueOf()方法。 toFixed()方法返回的是具有指定位数小数的字符串表示。var oNumberObject = new Number(68); alert(oNumberObject.toFixed(2)); //输出 "68.00" 与格式化数字相关的另一个方法是toExponential(),它返回的是用科学计数法表示的数字的字符串形式,与toFixed()方法相似,toExponential()方法也有一个参数,指定要输出的小数的位数。toPrecision()方法根据最有意义的形式来返回数字的预定形式或指数形式。toFixed()、toExponential() 和 toPrecision() 方法都会进行舍入操作,以便用正确的小数位数正确地表示一个数。
- String对象 var n=new String(“Hello world”); length属性 String对象具有属性length,它是字符串中的字符个数 两个方法 charAt() 和 charCodeAt() 访问的是字符串中的单个字符。这两个方法都有一个参数,即要操作的字符的位置。 charAt() 方法返回的是包含指定位置处的字符的字符串 如果想得到的不是字符,而是字符代码,那么可以调用 charCodeAt() 方法 concat() 方法,用于把一个或多个字符串连接到 String 对象的原始值上。该方法返回的是 String 原始值,保持原始的 String 对象不变 indexOf() 和 lastIndexOf() 方法返回的都是指定的子串在另一个字符串中的位置,如果没有找不到子串,则返回 -1。这两个方法的不同之处在于,indexOf() 方法是从字符串的开头(位置 0)开始检索字符串,而 lastIndexOf() 方法则是从字符串的结尾开始检索子串。 localeCompare()对字符串进行排序,要进行比较的字符串,返回的是下列三个值之一 1.如果String对象按照字母顺序排在参数中的字符串之前,返回负数。 2.如果String对象等于参数中的字符串,返回0 3.如果String对象按照字母顺序排在参数中的字符串之后,返回正数。 slice() 和 substring()。这两种方法返回的都是要处理的字符串的子串,都接受一个或两个参数。第一个参数是要获取的子串的起始位置,第二个参数(如果使用的话)是要获取子串终止前的位置(也就是说,获取终止位置处的字符不包括在返回的值内)。如果省略第二个参数,终止位就默认为字符串的长度。 toLowerCase() toLocaleLowerCase() toUpperCase() toLocaleUpperCase() 从名字上可以看出它们的用途,前两种方法用于把字符串转换成全小写的,后两种方法用于把字符串转换成全大写的。toLowerCase() 和 toUpperCase() 方法是原始的,是以 java.lang.String 中相同方法为原型实现的。
- Instanceof运算符 instanceof 运算符与 typeof 运算符相似,用于识别正在处理的对象的类型。与 typeof 方法不同的是,instanceof 方法要求开发者明确地确认对象为某特定类型。var oStringObject = new String("hello world"); alert(oStringObject instanceof String); //输出 "true"
- ECMAScript一元运算符只有一个参数,即要操作的对象或值,他们是ECMAScript中最简单的运算符。 delete运算符删除对以前定义的对象属性或方法的引用。 void运算符对任何值返回undefined,该运算符通常用于避免输出不应该输出的值。<a href="javascript:void(window.open('about:blank'))">Click me</a> 自增自减 一元加法减法
- 位运算NOT实质上是对数字求负,然后减1,因此25变-26
- 位运算 & |
- 左移运算由两个小于号表示(<<),它把数字中的所有数位向左移动指定的数量。var iOld = 2; //等于二进制 10 var iNew = iOld << 5; //等于二进制 1000000 十进制 64
- 有符号右移运算符由两个大于号表示(>>)。它把 32 位数字中的所有数位整体右移,同时保留该数的符号(正号或负号)。有符号右移运算符恰好与左移运算相反。例如,把 64 右移 5 位,将变为 2:
- 无符号右移运算符由三个大于号(>>>)表示,它将无符号 32 位数的所有数位整体右移。对于正数,无符号右移运算的结果与有符号右移运算一样。
- 逻辑运算符:! && ||
- 乘性运算符:与java的运算方式相似 乘法运算符(*) 除法运算符(/) 取模运算符(%)
- 加性运算符:在ECMAScript中,加性运算符有大量的特殊行为。 加法运算符(+),如果某个运算数是字符串,那么采用下列规则:1.如果两个运算数都是字符串,把第二个字符串连接到第一个上。 2.如果只有一个匀速阿奴是字符串,把另一个运算符转换成字符串,结果是两个字符串连接成的字符串。 减法运算符(-)。
- 关系运算符:关系运算符执行的是比较运算,每个关系运算符都返回一个布尔值。对于字符串,第一个字符串中每个字符的代码都与会第二个字符串中对应位置的字符的代码进行数值比较。完成这种比较操作后,返回一个 Boolean 值。问题在于大写字母的代码都小于小写字母的代码。 var bResult = "25" < "3"; alert(bResult); //输出 "true" 这段代码比较的是字符串 "25" 和 "3"。两个运算数都是字符串,所以比较的是它们的字符代码("2" 的字符代码是 50,"3" 的字符代码是 51)。 var bResult = "25" < 3; alert(bResult); //输出 "false" 这里,字符串 "25" 将被转换成数字 25,然后与数字 3 进行比较,结果不出所料。
- 等性运算符:等号由双等号(==)表示,当且仅当两个运算数相等时,它返回 true。非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。 全等号由三个等号表示(===),只有在无需类型转换运算数就相等的情况下,才返回 true。 非全等号由感叹号加两个等号(!==)表示,只有在无需类型转换运算数不相等的情况下,才返回 true。
- 条件运算符:即三目运算
- 赋值运算符:简单的赋值运算符由等号(=)实现,只是把等号右边的值赋予等号左边的变量。
- 逗号运算符:用逗号运算符可以在一条语句中执行多个运算。例如:var iNum1 = 1, iNum = 2, iNum3 = 3;
- ECMAScript if 语句 if(){....}else{.....} if(){......}else if{......}else{.....}
- ECMAScript 迭代语句(循环语句) do.....while.... do-while 语句是后测试循环,即退出条件在执行循环内部的代码之后计算。这意味着在计算表达式之前,至少会执行循环主体一次。 while(){....} for(){...} for( ... in ... ){...}
- ECMAScript标签语句 例:start : i = 5;
- break和continue语句 break语句可以立即退出循环,阻止再次反复执行任何代码。而continue语句只是退出当前循环,根据控制表达式还允许继续进行下一次循环。break和continue可以与有标签的语句一起使用。
- with语句用于设置代码在特定对象中的作用域。with 语句是运行缓慢的代码块,尤其是在已设置了属性值时。大多数情况下,如果可能,最好避免使用它。