三部分:核心(ECMAScript),文档对象类型DOM,浏览器对象类型BOM
ECMAScript不一定非要在浏览器上使用,它只是一种对程序语言的标准规定。ActionScript、JavaScript都实现了ECMAScript。
想要成为ECMAScript的实现,该实现必须做到: 1. 支持ECMA-262描述的所有“类型、值、对象、属性、函数以及程序语法和语义 2. 支持Unicode字符标准 3. (可选)添加没有描述的“类型、值、对象、属性、函数” 4. (可选)支持ECMA-262没有定义的“程序和正则表达式语法”
针对XML但经过扩展用于HTML的应用程序接口 把整个页面映射为一个多层节点结构,HTML或XML页面由节点组成,节点又包含着不同类型的数据。 DOM创建了表示文档的树形图,开发人员可以进行删除添加修改节点。
无需重新加载页面,就可以修改外观和内容
因为Netscape和微软在开发DHTML掐架,浏览器互不兼容,负责制定Web通信标准的W3C(World Wide Web Consortium万维网联盟)着手规划DOM
DOM1:DOM Core(如何映射文档结构)和DOM HTML(添加针对HTML的对象和方法)组成
DOM不是只针对JavaScript
DOM2: 扩充了鼠标和用户界面事件、范围、遍历,通过对象接口增加了对CSS支持。新模块:DOM视图,DOM事件,DOM样式,DOM遍历和反额为
DOM3:引入了以统一方式加载和保存文档的方法,新增了验证文档的方法,对核心扩展,开始支持XML1.0
其他语言DOM标准:SVG,MathML, SMIL
BOM只处理浏览器窗口和框架,扩展包括 * 弹出新浏览器窗口的功能 * 移动缩放和关闭浏览器窗口的功能 * 提供浏览器信息的navigator对象 * 提供加载页面详细信息的location对象 * 提供用户显示器分辨率的screen对象 * 对cookies的支持 * 像XMLHttpRequest和IE的ActiveXObject这样自定义的对象 BOM没有标准遵循,每个浏览器有自己的实现。window和navigator制式事实标准,HTML5在解决
ECMAS 5中 "use strict",执行结果会有很大不同
如果语句省略分号,则有解析器确定语句的结尾。分号可以避免很多错误,如不完整输入,压缩错误,增进代码的性能
松散类型:可以用来保存任何类型的数据
未初始化的变量,保存为undefined
省略var操作符的,会创建一个全局变量
6种 1. undefined 2. null:空的对象引用 3. boolean 4. number 5. string 6. object:无序的名值对组成
typeof是一个操作符不是函数
undefined值是派生自null值的,因此null == undefined 是true
转型函数Boolean() true: 非空字符串,非零数字(包括无穷大),任何对象,n/a(not applicable 类型Undefined) false:空字符串,0和NaN,null, undefined
注意自动转换的发生!
八进制:第一位是0,然后是八进制数字序列(0~7),如果字面的数值超出了范围(出现89),会自动当成十进制数值解析 十六进制:前两位必须是0x,后面跟(0~9及A~F),可大写可小写
进行算术计算时,所有八进制和十六进制表示的数值最终都将被转换成十进制.
+0和-0相等
保存浮点数值需要的内存空间是整数的两倍,抓紧一切机会保存整数。所以如果小数点后没有数字就会保存为整数。
极大或极小的数值,可以用e表示的浮点数值表示,等于这个数乘以10的指数次幂。
var floatNum = 3.125e7; // ==31250000 0.0000003 == 3e-7
最高精度是17位小数,但是,无法测试特定的浮点数值,这是基于IEEE754数值的浮点计算的通病
0.1 + 0.2 = 0.3000000000000000004
ECMAScript表示的最小数值保存在Number.MIN_VALUE,大多数浏览器是5e-324, Number.MAX_VaLUE, 1.79….,如果超出范围,会转换成Infinity或-Infinity,
可以用isFinite()函数测试是否在范围内
本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)
NaN与任何值都不相等 NaN == NaN //false
isNaN(), 不可以转换为数值的返回true , 对象也可以用,先调用对象的valueOf方法, 再调用toString()方法,再返回测试纸 isNaN('blue') //true
只有0/0 = NaN, 整数/0 = Inifinity, 负数/0= -Inifinity
转换规则
Number * Boolean, true 1, false 0 * null, 0 * undefined, NaN * 字符串
* 只包含数字:“011.1” -> 11.1 * 包含16进制, 转换成10进制 * 空的,转换为0 * 其他的,NaNparseInt(“0xAF”, 16) * 会忽略字符串前面的空格,“1234blue”会转为1234,blue放前面不可以。 * 16进制或8进制,会转为10进制。第二个参数是基数
* parseInt("AF") //NaN * parseInt("AF", 16) //175parseFloat * 第二个小数点无效 * 始终忽略前导的0,只解析十进制
* 1234blue //1234 * 0xA //0 * 22.5 //22.5 * 22.34.5 //22.34 * 0908.5 //908.5 * 3.125e7 //31250000String 包含特殊的字符字面量——转义序列,用于表示非打印字符,或者具有其他用途的字符
\n 换行 \t 制表 \b 退格 \r 回车 \f 进纸 \\ 斜杠 \' 单引号 \" 双引号 \xnn 十六进制代码nn表示的一个字符,n为0~F,\x41表示A \unnnn 十六进制代码nnnn表示一个Unicode字符,\u03a3希腊字符 * 一个转义序列表示一个字符转换为字符串
toString(): 数值、布尔值、对象和字符串都有这个方法,null和undefined没有。可以传递基数如果不确定是否是null或undefined,可以使用String()。null返回”null”,undefined返回”undefined”Object类型
每个实例都有下列属性和方法 constructor hasOwnProperty(propertyName) isPrototypeOf(Object) propertyIsEnumerable(propertyName) toLocaleString() toString() valueOf()
一元操作符:只能操作一个值的操作符 1. ++age(先+后执行), age– num1– + num2 使用的是num1的初始值,此时的num1已经减一 例子:
var o = { valueOf: function(){ return -1; } } “2”++ 3 "z"++ NaN false++ 1 1.1-- 0.1000000000000000000009 o-- -22. +num, -num + 正,不影响。false和true转换成0和1, 字符串为NaN - 负
-“01” -1 -“1.1” -1.1 -“z” NaN -false 0 -o 13. 位操作符(P39) ECMAScript所有数值都以IEEE-754 64位格式存储,但是位操作符操作的时候,先将64位转换成32位的整数,然后执行操作,最后把结果转换回64位。 32位中的前31位用于表示整数。第32位用于表示数值的符号:0是整数,1是负数。(符号位),31位中的每一位都是2的幂。 负数,使用的格式是二进制补码。求-18,先求18的二进制码,把1替换0,0替换1,然后加1.
3.1 按位非 NOT,~ num1 = 25; //二进制00000000000000000000000011001 ~num1 = -26; //二进制11111111111111111111111100110 本质是-num1-1,负数减一,但是NOT速度快 3.2 按位与 AND & 1 & 1 = 1, 1 & 0 || 0 & 1 || 0 & 0 = 0 3.3 按位或 OR | 1 | 1 = 1; 1 | 0 = 1; 0 | 1 = 1; 0 | 0 = 0 3.4 按位异或 XOR ^ 1 ^ 1 = 0, 其余同3.3 3.5 左移 << 2 << 5 ----- 64 10向左移动5位 1000000,后面多5个0,符号位不变 3.6有符号的右移 >> 64 >> 5 ----- 2 3.7 无符号右移 >>> 所有数值的32位都向右移动 正数情况相同 负数,差别非常非常大 -64 >>> 5, 64 ---- 00000...01000000 --- 1111...10111111 + 1 --- 1111...101000000 --- 右移5位,补0 --- 000001111...104.布尔操作符
1. 逻辑非 ! 对象 false 空字符串 true 0 true 任意非0,Infinity false null true NaN true undefined true !!a, !a无论如何会返回一个布尔值,!再对其求反 2. 逻辑与 && a && b 如果a是对象,返回b 如果b是对象,只有a为true时才会返回b 如果a和b都是对象,返回b 如果有一个是null,返回null 如果有一个是NaN,返回NaN 如果有一个是undefined,返回undefined 短路操作,如果第一个a有结果,不会对b求值。 __如果使用了未定义的值,&&会报错,中断下面代码的执行__ 3. 逻辑或 || 5.