js高级程序设计(第三版)学习笔记(第一版)

ecma:欧洲计算机制造商协会
iso/iec:国际标准化和国际电工委员会

dom级别(10*)文档对象模型
1:DOM核心(映射基于xml文档)与dom html(在dom核心基础上)
2:对鼠标,事件,范围,遍历,还有对css样式表的支持
dom2:新接口...视图,事件(鼠标,移动),样式(css),遍历与范围(对文档树的操作)
3:对文档加载和保存,验证模块,对核心进行扩展,对xml.0规范
其他dom
svg可伸缩矢量图
mathml数学标记语言
mghi同步多媒体集成语言
ie5 dom1
mozilla 0.6.0 支持dom
firefox3完全支持dom1 dom2 dom3(部分)

bom(6*)浏览器对象模型
弹出新窗口
移动,绽放,关闭浏览器窗口
提供浏览器详细信息location对象
提供用户显示器分辨率screen对象

html中使用js方式
<script></script>在html内部使用
<script src=‘js.js‘></script>外部使用
属性:async:用于下载此脚本 ,只对外部js文件有效
charset:字符集(一般情况下,设置成utf-8即可)
defer延迟执行脚本,在ie7版本之前有效(对外部js文件有作用)
language:不在使用
type:脚本文件内容,js在服务器端时,使用的是mime:application/x-javasciprt
src:外部文件路径
alert(obj)打印obj字符串内容
console.log(obj)向控制台输出obj字符串内容
现在的web应用程序都将js文件放在body层里面使用,这样做的好处是:当js代码被下载时,它会和body

里面的内容同时显示出来,如果js文件存放在head里面时,它会被下载,解析,和执行完成之后,才呈

现body主体内容,这样会在中间出现延迟时间,会造成页面的部分空白.
h5规范了对脚本按照它们出现的先后顺序进行执行
ie4到ie7对defer这个属性是支持的,ie8之后,就完全按照h5规则来制定
ie4,firefox3.5 safari5 chrome都最先支持defer属性
xhtml要设置成defer=‘defer‘
async(异步脚本)与defer类似,但它不保证脚本的执行顺序
xhtml要设置成async=‘async‘

js基础
1:区分大小写
2:不能以数字开头,第一个字符必须以字母或下划线或者$开头,后面跟着字母或下划线或者$或者数字

,采用驼峰大小写方式(第一个字母小写,其余每个单词贩首字母大写)
3:不能使用关键字,如functinon ,class,if等

//单行注释
/* */多行注释

在js中基于对象
严格模式
‘use strict‘支持(ie10+,firefor4+,safari5.1+,opera12+,chrome)
每个语句结束后,使用分号(;)来结束;

变量
var obj;这个是声明,但没有初始化值,如果当打印obj这个只声明的变量时,会显示undefined(未定义

);
obj=[];表示把右边的数据传给左边obj这个变量,让这个obj变量在内存地址中生成一个唯一的id地址
变量:它是一种用于保存js任何您需要的数据类型(如整形,数组),且是动态的,当这个变量obj改变

了它的数据类型时,内存中的(唯一id)地址,也跟着改变

如果在function中使用var 来声明变量时,那么这个变量将是局部变量,如果function功能结束后,那么

在function中所有的(比如局部变量)将被gc(回收机制),如果在function中没有使用var来声明变量时

,这个变量将是全局变量
var多行定义:var f1=1,f2=2,f3=[];
注意:在严格模式下:不能使用eval或者arguments这类变量
数据类型:
undefined null boolean number string (特殊的数据类型:object)
typeof:检测给定的变量是什么数据类型(它是一个操作符,并非函数),如下
基本语法:typeof obj;
typeof会返回以下几种情况
undefined:未定义
boolean:布尔值
string:字符串
number:数值
object:对象或null
function:函数

undefined:使用var声明时,但未初始化时,那么就是undefined

var a=1,b=2,c=[];
a,b,c=b,a+b,c交换
判断类型:typeof obj ,obj instanceof objx(推荐使用它)

null空指针对象:(返回object对象)对于保存对象的变量还没有变成真正变量时,使用null,程序员给定

的,使用null可以明白相应的变量是否已经保存了一个对象的引用
undefined的值它是派生于null值的
undefined与null之间是相等操作符(true),主要目的是:转换其操作数
undefined对于一个变量没有需要显示的时候,还有,没有初始化obj的时候,计算机给的

boolean:true(不一定1),false(不一定0)
var t1=true;
var f1=false;
使用Boolean(obj)函数可以将obj强制转换为一个布尔值,返回的结果是true或者false;

Number:数值
整型:
十进制:var intNum=55;
八进制:070;(严格模式下,如果使用八进制将出现错误)
十六进制:0x25;

浮点:(是根据计算机精度来决定的),最高精度是17位小数,但在进行计算算术时会出现精度问题
0.1+0.2等于0.30000000000000004这样的方式

var floatNum=1.23;

number的最小范围:Number.MIN_VALUE(5e-324)
最大范围:Number.MAX_VALUE(1.7976931348623157e+308)
如果不在上面(最大和最小值范围)将自动转换为特殊的+-Infinity(无穷)值,它是一个无法进行计算的

特殊数据结构;
isFinite()函数,用于判断这个参数是否在最小与最大值之间,如果是true,否则是flase

如下
a=Number.MAX_VALUE+Number.MIN_VALUE
alert
(isFinite(a))

Number.NEGATIVE_INFINITY Number.POSITIVE.INFINITY也可以得到+-Infinity的值;

NaN:表示一个本来要返回数值操作符未返回数据的值(不会出现错误),在js中什么数除了0,均是NaN
特点:任何数与NaN进行计算(包括NaN)返回NaN
NaN不等于任何数据(包括NaN本身)
isNaN()函数,可以接受一个参数,用于判断是否不是数值,当isNaN()接受到一个值之后,会尝试将这

个值转换为数据,如果这个参数是非数值时,返回结果是true,如下
isNaN(‘‘)
isNaN()也适用于对象,如果调用isNaN()函数时,首先会调用对象的valueOf()对象,然后确定譔对象返

回的值是否可以转换为数值,如果不能,则这个返回值再调用toString()方法,再测试返回值

数值转换
Number()用于任何数据类型
规则:如果是布尔值,转换为0和1
如果是数字,则传入和返回
如果是null,返回0
如果是undefined,返回NaN
如果是字符串
如果字符串中只包含数字的(包括前面带正号或者负号情况),将转换为十进制,如
‘1‘会变成1,‘011‘会变成11(忽略11前面的0)
如果字符串中包含有效浮点格式,转换对应的浮点格式(规则与转换为数值类似)
如果字符串包含有效的十六进制格式,转换为大小相同的十进制整数
如果字符串为空,转换为0
如果字符串除上述条件之外的字符,均转为NaN
如果是对象,调用对象的valueOf()方法,然后按照上面的规则进行处理,如果返回是NaN,再调用对象

toString()方法,然后再次使用上面的方法进行处理,如下

parseInt()转换字符串,处理整数,如果第一个是数值字符或者负号,,它将继续解析下一个字符,直

到遇到非数字字符或者负号,如果遇到非数字或者非负号时,返回NaN
parseInt()支持八进制,十六进制,十进制等
parseInt(‘0x‘)返回
NaN,如果0x之后没有数值或者不是数值时
parseInt()第二个参数(指定几进制)
parseFloat()用法与parseInt()一样,但区别是:可以用于整型和浮点,如果遇到第一个小数点时是有

效的,当再次遇到第二个小数点时无效,如
22.35.4,会返回22.35

string:字符串,是不可变的,如果想改变这个字符串变量,那么必须先销毁这个字符串变量,然后重新

定义
在字符串,使用+:它是拼接
转换为字符串:str.toString(),默认情况下,不需要在toString()中使用参数,默认十进制方式返回数

值字符串,可以输出以十进制,二进制等相关几进制;

如果不清楚值是否是null或者undefined时,可以使用String()转换函数
String()转换规则
如果值有toString()时,则调用此方法(无参数)返回相应结果
如果是null,返回‘null‘
如果是undefined,返回‘undefined‘

null与undefined没有toString()方法

Object对象,使用object对象可以给实例对象添加属性和(或者)方法,也可以自定义对象
var o=new Object();

Object每个实例都具有以下属性和方法
constructor:保存创建当前对象函数:构造函数,就是Object()
hasOwnProperty(propertyName):用于检查给定属性在当前对象实例中(并非实例原型中)是否存在,
propertyName必须以字符串方式指定
isPrototypeOf(object):判断传入的对象是否是传入对象的原型
propertyIsEnumerable(propertyName):判断给定的属性是否能够使用for-in进行枚举,propertyName必

须以字符串方式指定

toString()返回对象字符串表示
valueOf()返回对象字符串,数值或者布尔表示,与toString()方法一样
toLocaleString():返回字符串表示,该字符串与执行环境地区对应
操作符
一元操作符
i++:先在i使用当前值,然后再加1
++i:先计算,后使用这个新值

++,--用于的规则可以在数值,字符串,布尔,浮点,对象等
如果是一个有效的数字字符串,转换为数值,然后回加减1,字符串变量变成数值变量
如果不是一个有效的数字字符串,将变量设为NaN,字符串变量变成数值变量
用于布尔时,将转换成0或者1再执行加减1,布尔值变量变成数值变量
浮点数值时,执行加减1操作
如果是对象的话,调用对象的valueOf()方法,然后按照上面的规则进行处理,如果返回是NaN,再调用对

象toString()方法,然后再次使用上面的方法进行处理
var o={
valueOf:function()
{

return -1;

}

};

一元加入只剩符:(+,-,*,/)等
obj=+obj,如果+/-放在obj前面,不会对+/-obj数值造成任何影响

位操作符(整形){暂时不讨论这部分}

布尔操作符
not(非) and(与) or(或)

not(!)
规则
以下情况如果使用not条件式,均返回false
如果是对象/非字符/非0数值
除以上情况均是true

js中可以使用奇数!表示为 not 偶数!表示取反

and(&&):表达式1与表达式2同时为true时才能为true

第一个是对象,返回第二个条件
有一个是null,则返回null
有一个是nan则返回nan
有一个是undefined,则返回undefined

or(||)
条件表达式中,其中某个为true,则为true

如果第一个是对象,则返回第一个
如果第一个条件为false,则返回第二个
如果2个都是对象,则返回第一个
如果2个都是null/nan/undefined,返回null/nan/undefined;

乘法:*
规则;
如果是数值,则执行常规计算,无论是2个正数还是2个负数计算结果都是正数,如果其中一个是有符号

的,那么返回的结果是负数,如果相乘之和超出范围时,则返回Infinity或-Infinity
如果其中一个是nan,则返回nan
如果infinity与0相乘,则返回nan
如果infinity与非0数值相乘,返回+/infinity
如果infinity相乘,则返回infinity
如果其中某个并非数值,那么将会在后台调用Number()将转换成数值,然后根据上面的规则进行计算

除法(/)
它的规则与乘法类似
如果是数值,则执行常规计算,无论是2个正数还是2个负数计算结果都是正数,如果其中一个是有符号

的,那么返回的结果是负数,如果相乘之和超出范围时,则返回Infinity或-Infinity
如果其中一个是nan,则返回nan
添加几条不同的
0除以0,返回nan
非0除了0,返回+-infinity
如果infinity相除,则返回nan;
如果infinity被任何非0数值除,返回+-infinity
如果其中某个并非数值,那么将会在后台调用Number()将转换成数值,然后根据上面的规则进行计算

求模(%)
它的规则与乘法类似
如果是数值,则执行常规计算
如果其中一个是nan,则返回nan
如果被除数是无穷大值而除数是有限大的数值,返回nan
如果被除数是有限大而除数是0,返回nan
如果infinity相除,返回nan
如果被除数是有限大的数值,而除数是无穷大的数值,则结果是被除数
如果被除数是0,返回是0
如果其中某个并非数值,那么将会在后台调用Number()将转换成数值,然后根据上面的规则进行计算

加号(+)
不是字符串时
如果相加的并非是字符串,那么进行常规计算
如果+/-infinity之间计算,则返回+/-infinity
如果infinity与-infinty进行计算,返回nan
如果+/-0之间的计算,那么是常规计算
除-0+-0等于-0外

如果是字符串(+),那么进行拼接
如果只有一个操作符是字符串,那么将另一个转换为字符串,然后再拼接
如果操作符是一个对象,数值,或者布尔,那么调用它们的toString()方法取得对应的字符串值,然后

根据上面的规则,对于null和undefined分别调用String()函数并取得字符串‘null‘和‘undefined‘

减法(-)

规则:
如果均是数值,进行常规计算
如果某个是nan,返回nan
infinity与infinity计算,返回nan
-infinity与-infinity计算,返回nan
infinity与infinit-y计算,返回infinity
-infinity与infinity计算,返回-infinity
如果其中一个是字符串,布尔值,null或者undefined先从后台调用Number()函数转换为数值,然后根据

减法规则,如果转换结果是nan的话,那么结果就是nan;
调用对象的valueOf()方法时,如果得到的结果是nan,那么返回nan,如果没有valueOf()方法,则调用

toString()方法,然后将字符串转换为数值;

关系操作符
<,>,>=,<=,!=,==
规则:
如果比较的是数值,那么就执行数值比较
如果是字符串比较,那么取得对应字符串的编码
如果其中一个是数值,那么另一个将转换为数值,然后再进行比较
如果其中一个是对象,那么先调用对象的valueOf()方法时,然后使用上面的规则,如果没有valueOf()方

法,如果对象没有valueOf()方法,则调用toString()方法,并根据上面的结果进行执行比较

如果其中一个是布尔,那么先转换成数值,然后再比较

如果其中某个与nan比较,永远返回false
当字符串与数值比较时,永远都返回false,因为字符串被转换成nan了
总结:任何操作数与nan进行比较时,永远都是false;

相等操作符(==与!=):先转换再比较,全等与不全等--仅比较而不转换
规则
如果其中一个是布尔,在比较相等之前先将其转换为数值--false(0)而true(1)
如果一个是数值,另一个是字符串,那么先将字符串转换为数值,然后再比较
如果一个是对象,另一个不是,那么调用对象valueOf()方法,然后按照上面规则进行比较

如果2个操作符在进行比较时,使用以下规则
null与undefined是相等的
要比较相等之前,。不要将null与undefined转换成其他任何值
如果其中一个是nan,那么返回结果是false,而不相等返回true
nan之间比较,永远为false,,也就是nan不等于 nan
特殊值
true==2;false
undefined==0;false
null==0;false
‘5‘==5;true

str.toLowerCase()小写
str.toUpperCase()大写

全等(===)不在转换,仅比较,如果结果为false时,因为对应的数据类型不同
条件表达式
三元操作符exr0 ?exr1:exr2

赋值操作符:将右边的值赋给左边变量
+=,-=,*=,/=
<<=左移 >>=右移
>>>=无符号右移
多行语句
var a=1,b=2,c=2;
var num=(1,2,3,4,5);结果num是5,会取得num的最后一个值

语句体
if语句
语法
if(表达式1){

语句体1
if(表达式_0){

}else{
语句体
}
}else if(表达式2){

语句体1
}else{

语句体3
}
如果if条件表达式为true时,执行if语句下面的语句体,else if else相关语句不再执行
如果if条件表达式为flase时,执行else if(如果多个时,根据情况为true时,执行) else不在执行
如果上面的条件均不满足时,执行else语句

do-while后测试循环语句,即只有在循环体中代码执行后,才测试出口条件(至少会执行一次代码请求)
语法
do{

语句体
}
while(表达式);

while语句(一般情况,如果是没有顺序,使用它)
语法
while(表达式){

语句体
}

for循环
语法:
for(表达式1,表达式2,表达式3){

语句体

for循环与while循环其中就是一样的
在for循环中,变量初始化表达式中,可以不使用var关键字,可以在外部生成 这个变量,因为外部变量

可以在for循环中访问到
var count=0,i=1;
for(i;count;i++){

}
死循环
for(;;){

}
while(true){

}

for-in迭代语句体(和python中的类似:枚举)
语法
for(迭代别名 in 表达式){

语句体

}
在使用for-in之前,会检测对象的值是否存在null或undefined

}

(1*)label语句
语法
label:表达式;,常用for等循环一起使用
作用:是在代码中添加标签,以方便未来使用

break(跳出循环,不在执行)和continue(跳出本次循环,然后从循环顶部继续执行)与label语句联合使


且在break/continue后面可以添加一个变量,如下
label:for(){
break label

}

with语句
语法:
with(表达式){

语句体
}
作用:将代码的作用域设置到一个特定的对象中,主要是为了简化多次编写同一个对象时
缺点时,使用with会让性能下降,在开发中,不建议使用

(10*)switch语句
语法
switch(表达式){
case v1:表达式
break
....
case vn:表达式n
break
default:
表达式
}
它的语法与if语句类似
注意:在case中省略break时,将会继续执行下一个case语句中的代码
default用于在表达式中不匹配前面所有case语句中
如果在case中省略了break,建议在case下面使用注释来说明情况
这边的v1不仅仅只能表示数值,也可以表示其他数据类型,如对象等

函数
语法
function funcname(形参){
函数主体

}funcname(实参)

形参也是局部变量
function funcname(形参<传值>){

var funcname;局部变量
}

funcname(实参 传值) 实参是全局变量

在js中,function中括号里面的参数,无论给多或者不给,js永远不会报错,也不会关心传入的参数是

什么类型,因为在js内部机制中使用一个数组来表示,,即使这个参数为0或者更多,js也没有什么错误

提示
数组的长度:array.length

arguments.lenght可以获取函数名中传递给函数多少个参数
arguments[int]它还可以和参数一起使用

arguments它的值永远与对应命名参数的值保持同步

时间: 2024-09-30 17:46:24

js高级程序设计(第三版)学习笔记(第一版)的相关文章

JS高级程序设计第三版——JavaScript简介

JavaScript简史 JavaScript由Netscape(网景)公司在1995年发布,最开始的主要目的是处理以前由服务器端语言负责的一些输入验证操作,以便提高用户体验,后来就慢慢的发展为一门强大的编程语言.作者建议:要想全面理解和掌握JavaScript,关键在于弄清楚它的本质.历史和局限性. JavaScript实现 一个完整的JavaScript实现=核心(ECMAScript)+文档对象模型(DOM)+浏览器对象模型(BOM). 1.ECMAScript:由ECMA-262定义的E

javascript高级程序设计第三版 读书笔记

第三章   基本概念 1.在JavaScript中是区分大小写的,第一个字符是字母 _ 或者$,其他字符可以试数字 字母 _ 或者$,命名格式要求是驼峰式书写(第一个字母小写,剩下的每个有意义的单词开头大写  比如fontSize) 2.单行注释//  块级注释为/*多行 内容*/ 不得使用关键字和保留字 3.在JavaScript中变量是松散型的   可以为任何一种类型 4.用var操作符定义的变量成为定义该变量的作用域中的局部变量. function test(){ var i = 'hi'

js高级程序设计第三版---1~3章

DOM并不只是会对js的,很多其它语言也实现了DOM,但DOM已经是js的一个重要组成部分. BOM是js实现的一部分,但是没有相关的标准,所以每个浏览器都有自己的实现,这个问题在HTML5中得到了解决. 1.<script>的属性: async(异步加载):表示立即下载脚本,不会影响页面中的其它操作,只对外部脚本有效.<script async="async" type="text/javascript"</script> chars

JS高级程序设计第三版——在HTML中使用JavaScript

使用<script>元素的方式 外部引用式.行内式.嵌入式. JavaScript引用放在<body>后面的原因 假如在文档的<head>元素中包含所有JavaScript文件,意味着必须等到全部JavaScript代码都被下载.解析和执行完成以后,才能开始呈现页面的内容.对于那些需要很多JavaScript代码的页面来说,这无疑会导致浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口中将是一片空白. JavaScript在XHTML中的用法 XHTML是一种可扩

Java高级程序设计第三版:基本概念

严格模式 ? 1 2 3 4 5 6 function fun(){   "use strict";  //启用严格模式,作用域函数  }   "use strict";  //全局 变量 变量定义需要用var,如果没有通过var定义的变量会由于相应变量不会马上有定义而导致不必要的混乱. 数据类型 5种基本数据类型:Undefined.Null.Boolean.NUmber.String 1种复杂数据类型:Object typeof 对未初始化的和未声明的变量执行t

《JavaScript高级程序设计 第三版》 前2章 Javascript简介与HTML 读书笔记

第一章:Javascript简介 1.JavaScript诞生于1995年,当时,它的主要目的是处理以前由服务器端语言(如Perl)负责的一些输入验证操作.现在,JavaScript是一种专为与网页交互而设计的脚本语言. 注:Netscape(网景)公司研发,Java是sun公司研发,原名为LiveScript,为了搭上媒体热炒的Java的顺风车,更名为JavaScript 2.微软推出JSript的和网景的JavaScript相竞争,最后微软胜利.ECMA指定了规定并重新命名为ECMAScri

c#高级编程第七版 学习笔记 第三章 对象和类型

第三章 对象和类型 本章的内容: 类和结构的区别 类成员 按值和按引用传送参数 方法重载 构造函数和静态构造函数 只读字段 部分类 静态类 Object类,其他类型都从该类派生而来 3.1 类和结构 类和结构都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法 结构和类的区别是他们在内存中的存储方式.访问方式(类是存储在堆上的引用类型,而结构是存储在栈上的值类型)和他们的一些特征(如结构不支持继承).较小的数据类型使用结构可提高性能.但在语法上,结构和类非常相似,主要的区别是使用

读书笔记 - js高级程序设计 - 第三章 基本概念 -

启用严格模式 "use strict" 这是一个 pragma 编译指示 让编码意图更清晰  是一个重要原则 5种简单数据类型 Undefined Null Boolean Number String 1种复杂数据类型 Object 检测数据类型的方法 typeof 有如下值: undefined boolean object string number function typeof Null object 意在保存对象还没有保存对象的变量的初始值最好是什么 null 八进制的第一位

javascript高级程序设计第三版dom元素大小笔记

是滚动大小(scroll dimension),指的是包含滚动内容的元素的大小.有些元素(例如 <html>元素),即使没有执行任何代码也能自动地添加滚动条:但另外一些元素,则需要通过 CSS 的 overflow 属性进行设置才能滚动.以下是 4 个与滚动大小相关的属性. 在IE8以下scrollHeight=元素内容本身的高度. 1.增加边框,不同浏览器有不同解释. 谷歌火狐IE>=8会忽略边框的大小. 2,增加内边距,最终值是width||height+padding ie8以下是

2.1 &lt;script&gt;元素【JavaScript高级程序设计第三版】

向 HTML 页面中插入 JavaScript 的主要方法,就是使用<script>元素.这个元素由 Netscape 创造并在 Netscape Navigator 2 中首先实现.后来,这个元素被加入到正式的 HTML 规范中. HTML 4.01 为<script>定义了下列 6 个属性. async:可选.表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本.只对外部脚本文件有效. charset:可选.表示通过 src 属性指定的代码的字符