JavaScript高端程序设计(第1版)学习笔记一~伍章

第2章,在html中使用JavaScript

Html引进外部js脚本

<script type=”text/javascript”
src=”test.js”>多个</script>之间不应放脚本,因为并不会被实行</script>

<script>标签有三个defer属性能够延缓脚本执行,不过并不保险会按脚本排列顺序实践

提出:将脚本引进放在<body>标签的具有内容之后,而不放在<head>标签中开始展览引进,加快页面响应

<noscript></noscript>标签中的内容会在浏览器不援救脚本或脚本被剥夺的时候输出,启用了本子的浏览器将不会看出标签中的内容

第一章,基本概念

标识符

第二个字符必须是字母,下划线(_)或法郎符号($),有效命名字为字母、数字、下划线和法郎符号构成的

运用驼峰命名法:第三个字母小写,前边的每个单词首字母大写

单行注释:

//这是单行注释

多行注释:

/*这是
多行
注释
*/

typeof 操作符

typeof – 剖断给定变量的数据类型

返回:

“undefined” – 未定义的数据类型

“boolean” – 布尔值

“string” – 字符串

“number” – 数值

“object” – 对象大概NULL

“function” – 函数

注:函数在js中是目的,不是数据类型,因此选取typeof区分函数和对象是有不可缺少的

  typeof在多少时候会回到令人吸引但本领上确是科学的值,举例,null和目的,两者都会回来“object”

  null与undefined是极度的,null == undefined 将回来true

拓展算术计算时,全体的8进制和十陆进制都将转换来10进制

 

Infinity 无穷大,有正负无穷大,能够应用isFinite()判断是或不是无穷大

Number.MAX_VALUE,Number.MIN_VALUE分别保存着数值类型的最大值和最小值

Number.NEGATIVE_INFINITY和Number.POSITIVE_INFINITY分别保存着负和正无穷大

NaN 非数值,能够接纳isNaN决断二个变量是还是不是非数值

 

数值调换

强制调换Number(),不过结果并不客观,提出选取parseInt()函数,并指导供给转移的基数

例:

parseInt(“10”,2);    //以二进制解析
parseInt(“10”,8);    //以八进制解析

不带领基数意味着让parseInt自个儿支配哪些剖析字符串,那会在有些时候形成错误

parseFloat()与parseInt()基本一样,将字符串解析成浮点数,始终忽略前导零,只分析十进制值,十陆进制将被解析成0,因此她从未第3个参数

 

字符串类型

字符串类型变量是不可变,亦即字符串变量是为贰个常量,能够动用单引号(’),也足以采用双引号(”)定义字符串变量,但不可能分化盟,要是急需混用,建议加上转义字符(\)

行使toString()函数将一个值转变为字符串,数值则能够选择基数值举办调换

例:

var num = 10;

num.toString(“2”);  //”1010”

num.toString(“8”);  //”12”

 

也能够利用String()实行强制转变

 

Object类型

constructor:构造函数

hasOwnProperty(propertyName):检查给定的属性在现阶段目的中是或不是留存

isPrototypeOf(object):检查传入的靶子是或不是是传入对象的原型

propertyIsEnumerable(propertyName):检查给定的习性是还是不是可以使用for-in语句来枚举,与hasOwnProperty一样,给定的品质名必须以字符串的款型钦定

toLocalString():重临对象的字符串表示,与实行情状的地区对应

toString():重返对象的字符串表示

valueOf():再次回到对象的字符串、数值或布尔值表示。日常与toString重临同样

 

操作符

按位非:~,按位与:&,按位或:|,按位异或:^,左移:<<,有标记右移:>>(以符号位填充),无符号右移:>>>(以零填充),逻辑非:!,逻辑与:&&,逻辑或:||

事关操作符:<,>,<=,>=

对等和不等于:==,!=,先转移再相比

全等和不全等:===,!==,只相比,不调换,类型差别则区别

标准化操作符:? :,叁目运算符

逗号操作符:(,),重回最终三个表达式的值:var num = (三,5,六,2),num = 二

 

语句

if{},do{}while();,while(){},for(;;){}

for-in语句:

精准的迭代语句,能够用来枚举对象的天性

for(property in expression) statement

 

例:

for(var propName in window){

         document.write(propName);

}

 

注:当对象的变量值为null或许为undefined时,for-in会产生错误,即便ECMAScript伍改动了那一不当,不过,为了最大限度的有限帮助包容性,在使用for-in循环在此以前,先检验该目的的值不是null也许undefined

 

label语句:标签语句

start:for(var I = 0;i<count;i++){
    statement
}

其一start标签可以在现在的break和continue语句中利用,标签语句一般与循环语句一起利用

with语句:

将代码的成效域设置到三个一定的靶子中

with(expression) statement;

严酷情势下区别意行使with语句,不然将被视为语法错误

大批量行使with语句会导致质量下跌以及代码调节和测试困难,建议大型应用程序的付出不利用with语句

switch语句

switch(expression){
    case selection:statement;
         break;
     ……
    default:statement;
            break;
}

函数

凶横格局对函数限制:

函数无法命名字为eval和arguments

参数无法命名字为eval和arguments

不可能冒出八个命名参数同名的情景

知情函数参数

js中的函数并不介意传进来多少个函数参数,纵然与定义的意况差异,因为在函数接收到的永久都以贰个近乎数组形式的参数,函数并不爱戴数组包涵的参数。能够在函数体内通过arguments对象来拜访那几个参数数组。

arguments只是与数组类似,因为能够利用方括号来访问它的要素,使用length来规定传进来的参数个数。arguments中的参数顺序与传进来的参数顺序1致,并且是共同转移的。

注:没有传递值的命名参数,将会被赋值为undefined值。

  严谨形式对arguments对象作出了一些限制:在函数中对arguments实行赋值将会变得不行,重写arguments值将会变成语法错误

  使用arguments对参数的品种和数量举行推断,能够效仿重载

第陆章,变量、作用域和内部存款和储蓄器难题

注:js中具有函数的参数都以按值传递的

检验项目:instanceof

instanceof操作符,只可以操作引用类型,即对象,对大旨数据类型的测试始终重临true,因为基本数据类型不是目标

result = variable instanceof constructor

若变量是给定的引用类型,则赶回true

例:

person instanceof Object;        //person是Object类型吗?
color instanceof Array;             //color是Array类型吗?

并没有块级作用域

if(true){
     var j = “blue”;
}
alert(j);
//将会得到输出blue

假定在C/C++中校会现出错误,而js并不会冒出谬误,在块里面定义的变量将会增多到当前的花括号之外的功效域中。

污源搜集

标识清除

引用计数

第5章,引用类型

Object类型

二种成立实例方式:

1、使用new操作符后跟Object构造函数

var obj = new Object();
obj.name = “name”;
obj.age = 23;

二、使用对象字面量(通过对象字面量定义对象时,实际上并不会调用Object构造函数)

var obj = {
      name : “name”;
      age : 23
}

能够使用点表示法和方括号表示法访问对象的属性

点表示法:                                         
方括号表示法:(必须以字符串的样式表示要访问的属性名)

obj.name                                           obj[“name”]

注:当属性名包罗会招致语法错误的字符,或属性名使用的是重中之重字或保留字时,能够选择方括号表示法,还能经过变量访问属性

提议:除非必须运用变量访问属性,不然最佳利用点表示法

Array类型

创设格局:

一、使用Array构造函数

var arr = new Array();    //创建一个空数组
var arr = new Array(20);    //创建一个包含20个项的数组
var arr = new Array(“one”,”two”,”three”);     //创建包含one,two,three三项的数组

还可以够将new操作符省略

二、使用数组字面量表示法

var color = [“red”,”blue”];    //创建包含两个项的数组
var color = [“yellow”,”green”,];    //不要这样创建数组,浏览器的解析不同,结果会不同

注:使用数组字面量创造数组时,也不会调用Array构造函数

arr.length,将会回到数组的项数,将在重返数组的尺寸

对arr.length实行赋值,将会动态改表数组大小,赋值大于原数组大小将扩展数组,新添项得到undefined的值,小于原数组大小,将保留前边的数值,多的数值将被移除

数组检查测试:

对此唯有八个大局作用域来讲,instanceof能够很有益的检查评定有些变量是或不是是数组,但对于三个框架的网页来说,则存在四个例外的本子的Array构造函数,instanceof将不可以满意要求,为此引进Array.isArray(value)方法,那些方法能够最后明显某些值是或不是是数组,而随意是哪些架构的。协理的浏览器为:IE玖+,Firefox肆+,Safari5+,Opera拾.5+,chrome。

调换方法:

调用数组的toString()方法,将会回到由数组中各样值的字符串格局拼接而成的以逗号分隔的字符串,valueOf()方法重返的还是数组,与toString()是同等的结果

toLocaleString()重返的普通与toString()和valueOf()重回结果是一样的,但并不总是这么,使用toLocaleString()方法,则会去调用数组中每一项的toLocaleString()方法,而不是toString()方法。

join方法

join方法接受贰个参数,即作为分隔符的字符串

例:

var arr = [“one”,”two”];
arr.join(“|”);    //one|two

只要不给join传递参数,则赶回以逗号作为分隔的字符串

注:如果数组中某一项的值为null也许undefined,则调用join,toLocaleString(),toString(),valueOf()重临的结果则使用空字符串表示

数组的栈方法

var arr = new Array();

arr.push(),在数组末尾增添数据,能够流传两个参数,并重回修改后的数经理度

arr.pop(),从数组末尾移除最后三个多少,收缩数组的length值,并回到该项的值

数组的连串方法

var arr = new array();

arr.shift(),移除数组的率先项,缩小数组的length值,并回到该项的值

arr.unshift(),在数组的前端加多肆意个项,并再次来到修改后的数老董度

利用shift和push结合,能够效仿队列操作

运用unshift和pop结合,能够从相反方向模拟队列

重排序方法:

var arr = new Array();

arr.reverse(),翻转数组的项,即首尾顺序调转

arr.sort(),暗中同意景况下升序排列,注:排列顺序是数组值调换来字符串之后的升序排列,平日不是所急需的排序

sort方法基本上能用多个相比较函数作为参数,达成所需的排序方法,方法再次回到负数则按升序排列,再次来到整数则按降序排列,注:能够适应大大多排序情状

操作方法:

var arr = new Array();

arr.concat(),进行数组连接,并赶回连接后的数组,可传唱四个参数

arr.slice(),能够凭借当前数组中的三个或多个值制造2个新数组再次来到,接受三个或四个参数,即重临原数组的序曲地方和终结地方之间的富有项,不带有停止地方的项,唯有二个参数则赶回从该参数钦赐地点到最终的保有项。

注:即便参数是负数,则会将数组的尺寸加上这些负数获得的结果来规定地方。甘休地方小于发轫地点则赶回空

splice()方法:

删去:钦定四个参数,要删减的开第3人置和要去除的项数,例:splice(0,二);

插入:钦命多个参数,开首地点,要刨除的项数(0),要插入的项,插入的项能够是多少个项

         例:splice(2,0,”red”,”green”);                 
//从位置2插入red,green

轮换:与插入一样,第1个参数有生成,发轫地方,要去除的项数,要插入的项,插入的项数能够是七个项

地点方法:

indexOf(),lastIndexOf(),都吸收接纳八个参数,要物色的项和搜索源点地方索引indexOf从数组头初始查找,lastIndexOf从数组末尾先导查找。若没有找到则赶回-一.

注:查找时张开的比较使用的是全等操作符,就如使用“===”一样

迭代格局:

ECMAScript五定义了陆个迭代方法,全部接受多少个参数:每壹项上运营的函数,运转该函数的功效域对象—影响this的值。函数则抽出七个参数:数组项的值,该项在数组中的位置,和数组对象自己

var arr = new Array();

every(),对数组中每一项运营给定函数,每一项都回来true,则赶回true

filter(),对数组每1项运维给定函数,重返该实行函数重临true的项整合的数组

例:

var num = [1,2,3,4,5,4,3,2,1];
var filter = num.filter(function(item,index,array){
    return item > 2;
}); //[3,4,5,4,3]

forEach(),对数组中每1项运营给定函数,未有再次回到值,本质上与for循环迭代数组一致

map(),对数组中每壹项运维给定函数,再次来到每回函数调用的结果组成的结果

some(),对数组中每1项运维给定函数,只要任一项的函数结果是true,则赶回true

注:以上全数函数并不会对数组进行改换

例:

var num = [1,2,3,4,5,4,3,2,1];
    var mapResult = num.map(function(item,index,array(){
    return item * 2;
});
//以上代码返回数组每一项都乘2以后的数组

归并方法:

reduce()和reduceRight()

四个函数都会迭代数组的享有项,然后创设贰个终极回到的值,个中reduce从数组第二项起初,reduceRight从数组最终一项起初

那多个艺术都吸收接纳1个参数:多少个在每1项上都调用的函数和(可选的)作为联合基础的初步值。传递的函数须求抽出陆个参数:前八个值,当前值,项的目录和数组对象。这些函数的归来值会作为第一个参数字传送递给下1项,第壹次迭代产生在数组的第3项上,由此首先个参数是数组的第一项,第二个参数是数组的第3项。

例:

var value = [1,2,3,4,5];
    var sum = value.reduce(function(prev,cur,index,array){
    return prev + cur;
});    //sum = 15
//第一次执行回调函数,prev = 1,cur = 2,第二次,prev = 3(第一次函数返回结果1+2),cur = 3(当前数组项)。这个过程会把数组每一项都访问一遍。reduceRight除了方向不一样,其他都一样。

Date类型

Date类型使用自UTC1玖柒零.一.一午夜零时初叶通过的皮秒数来保存日期,能够将日期准确到一⑨柒零.一.一在此以前或之后十0
000 000(一亿)年。

采用Date构造函数而不传参数,新目的会获得当前几天子和时间,要创制特定日期时间,必须传入表示该日期的阿秒数,ECMAScript提供了四个主意Date.parse和Date.UTC方法来简化操作。

Date.parse方法接收3个象征日期的字符串参数。这一个艺术因落成而异,而且平日因地域而异。United States地带的浏览器支持以下格式:

月/日/年,如6/13/2004

英文月名 日,年,如January 1二,200四

英文名星期几 英文月名 日 年 时:分:秒 时区,如Tue May 二伍 200四 00:00:00
罗红霉素T-0700

ISO
860壹恢宏格式YYYY-MM-DDTHH:mm:ss.sssZ,如200肆-0五-贰伍T00:00:00,唯有帮衬js伍的兑现援助那种格式

Date.UTC也一致重回表示日期微秒数,参数分别为:年份、基于0的月度(二月份是0)、月底哪壹天(一-3一)、时辰数(0-二三)、分钟、秒及纳秒数,在那之中唯有前八个参数是必须的。

例:

var someDate = new Date(Date.UTC(2000,0));    //2000年1月1日0时0分0秒
var someDate = new Date(Date.UTC (2000,0,1,15,23,23));    //2000年1月1日15时23分23秒

Date构造函数会模仿Date.parse和Date.UTC函数。

Date.now方法重回调用这几个函数时的日子和岁月皮秒数。在不帮忙的浏览器下面,能够选拔+操作符获取Date对象时间戳

var start = +new Date();

var stop = +new Date();

日期格式化方法

toDateString—以特定于贯彻的格式突显星期几、月、日、年

toTimeString—以特定于完毕的格式展现时、分、秒和时区

toLocaleDateString—以一定于地面包车型客车格式展现星期几、月、日、年

toLocaleTimeString—以一定于贯彻的格式展现时、分、秒

toUTCString—以特定于完毕的格式完整的UTC时间

与toLocaleString和toString一样,以上办法未有2个可知用来在用户界面中呈现同一的日子新闻。

RegExp类型,正则

语法:类似于Perl语法

var expression = / pattern  /flags;

格局(pattern)部分能够是粗略或复杂的正则表明式,各类表明式可以行使1个或多个标记符,援助以下一个标志符

g:全局形式,将被利用于具有字符串,而不是在合作到第一个字符串后就甘休,

i:表示不区分轻重缓急写,

m:表示多行格局,即达到一行文本末尾时,会持续找出下1行

注:格局中享有元字符都需求转义

元字符:( [ { \ECMAScript, ^ $ | } ? * + .
] )

以上措施是以字面量情势开创正则表明式

动用RegExp构造正则表明式

var partten = new RegExp(“bat”,”I”);

注:使用RegExp构造函数,全部元字符必须另行转义

例:/\[bc\]at/  ===> “\\[bc\\]at”

RegExp实例属性

global:布尔值,表示是或不是设置了g标识

ignoreCase:布尔值,表示是或不是设置了i标记

lastIndex:整数,表示起先物色的下3个相称项的字符地点,从0算起

multiline:布尔值,表示是不是设置了m标记

source:正则表明式的字符串表示,根据字面量格局,而非传入构造函数中的字符串情势再次回到

RegExp对象的紧要措施是exec(),exec()接收3个参数,即要应用形式的字符串,重临三个相称项(固然设置了g标识),有未有设置g标识的反差在于,没有安装则连接回到同一个结果,设置了则赶回下3个杰出

test方法,接收3个字符串,只回去是或不是相称,不回去结果

Function类型

函数是目标,函数名是指针

定义方法:

//函数声明的形式
function sum(num1,num2){
    return num1 + num2;
}
//函数表达式的形式
var sum = function(num1,num2){
    return num2 + num2;
}
var sum = new Function(“num2”,”num2”,”return num1 + num2”);         //不建议,性能渣,但能更好的理解函数是对象的思想。

function add(num){
    return num + 100;
}
function add(num1,num2){
    return num + 200;
}
//实际如同下面的代码
function add(num){
    return num + 100;
}
add = function(num){
    return num + 200;
}

从而函数未有重载。

函数内部属性

函数内部有七个特殊对象,arguments和this

arguments有一个天性callee,指向具有这几个arguments的函数

概念递归函数时,最棒使用arguments.callee()来代替函数名,下落耦合,缩小主题素材的出现

例:

function factorial(num){
    if(num<1)
        return 1;
    else
        return num * factorial(num – 1);
}
function factorial(num){
    if(num<1)
    return 1;
    else
    return num * arguments.callee(num – 1);
}

this对象

函数的this对象引用的是函数据以实行的情形目标

ECMAScript5正式定义了另1个函数对象的属性:caller,保存着调用当前函数的函数的引用

函数包括了八个属性:length(希望接受的函数个数)和prototype,prototype不足为奇,所以for-in无法察觉他。prototype是具备引用类型保存其持有实例方法的真的所在

富含八个非承继而来的不二等秘书籍:apply和call

apply方法接收八个参数:叁个是在内部运营函数的作用域,相当于this对象,2个是参数数组,可以是Array实例,也能够是arguments对象

call与apply基本同样,分化在于,使用call函数,参数必须各个列举出来

传递参数并非apply和call真正用武之地,真正有力的地方在于可以扩展函数的成效域

例:

window.color = “red”;
var o = {color:”blue”};
function sayColor(){
    alert(this.color);
}
sayColor();            //red
sayColor.call(this);        //red
sayColor.call(window);    //red
sayColor.call(o);        //blue

不供给再将sayColor函数放到o对象中,就可以使o对象能够选拔sayColor函数

ECMAScript5还定义了另二个措施:bind,那些方法会创立二个函数实例,其this值会被绑定到传给bind函数的值

window.color = “red”;
var o = {color:”blue”};
function sayColor(){
    alert(this.color);
}
var objSayColor = sayColor.bind(o);
objSayColor();           //blue

 toLocaleString和toString始终重返函数代码,但出于浏览器差距,并未主意依照重返结果完结别的重大职能,valueOf也只回去函数代码

着力包装等级次序

Boolean、Number、String

对宗旨包装档次的实例调用typeof会再次来到object,而且具有的主导包装档案的次序的实例都会回到true,

Object构造函数也会像工厂方法一致,依据传入的值的花色重回响应的着力包装档案的次序的实例

例:

var obj = new Object(“some text”);
alert(obj instanceof String);    //true

接纳new调用基本包装档期的顺序和间接运用同名的转型函数是分化等的。例:

var value = “25”;
var num = Number(value);        //转型函数
alert(typeof num);                //”number”
var obj = new Number(value);    //构造函数
alert(typeof obj);                //”object”

Number类型

此外提供的秘籍

toFixed();接收一个参数,表示要以2人小数表示目前值,当前小数位过长则4舍5入,此措施能够表示带有0到1捌个小数位的数值,那只是标准落到实处范围

toExponential();接收贰个参数,重返指数情势表示,参数钦定重回的结果中的小数位数

toPrecision();接收1个参数,表示具备数字的位数,不包含指数部分

string类型

var str = “hello world”;
str.charAt(1);    //”e”,返回字符
str.charCodeAt(1);    //”101”,返回字符编码
str.concat();//连接字符串,可以接收任意个字符串

slice(),substring(),substr(),都接到1或五个参数,接收的首先个参数均代表开始地点,slice(),substring()接收的第贰个参数表示终止地方,substr()的首个参数表示回去的字符个数,若不给第3个参数,则赶回从开头地点到字符串结束位置的字符

引导负数表现不一致:slice会将有所带入的负数与字符串长度相加,substr会将首先参数加上字符串长度,第一个参数转变为0,substring()将装有负值转为0

indexOf,lastIndexOf方法都回来子字符串的岗位,indexOf从头查找,lastIndexOf从最后查找,未有找到再次来到-一,八个章程都足以收到第3个可选参数,表示字符从何地开端查找

trim(),再次来到源字符串删除前后缀全部空格的结果

toLowerCase,toLocaleLowerCase,toUpperCase,toLocaleUpperCase,带有Locale的法门是指向一定地区的落成。平日来说是未有啥样区别,但个别言语会为Unicode大小写调换应用非凡规则,那就非得运用针对一定地段的落到实处

match(),search()那七个格局均收到一个参数,字符串大概RegExp对象内定的一个正则说明式

replace()方法,接收三个参数,第1个参数能够是1个RegExp对象或字符串(不会被调换来正则表达式),第叁个参数能够是1个字符串或函数,若要替换全数字符串,则必须选择正则表明式,并加全局(g)标识

split(),接收3个参数作为字符串的分隔符,重返由分隔符分隔获得的数组,能够接到首个可选参数,作为再次来到结果的数组大小

localeCompare(),相比七个字符串,关于是不是区分轻重缓急写,视地点而定

一、源字符串应排在参数字符串此前,再次来到负数(具体视处境而定,通常为-一)

二、源字符串与参数字符串同样,重返0

三、源字符串排在参数字符串之后,重回整数(具体视情状而定,日常为①)

fromCharCode(),接收一个或多少个字符编码,转变来字符串,与charCodeAt()实践的是相反操作

UGL450I(通用能源标志符)

办法:encodeU科雷傲I,encodeU奥德赛IComponent,decodeU奇骏I,decodeUOdysseyIComponent,编码和解码,解码方法只好辨别各自对应的编码方法

eval(),将指导的字符串参数,调换来可施行语句,并插入到近日职责

eval创设的任何变量和函数都不会被升高,严苛格局下,外部不能访问eval创立的变量和函数

注:尽量不行使eval方法,仅属于个人思想

Math对象

min(),max(),ceil()向上舍入,floor()向下舍入,round()标准舍入,即4舍五入,random()重回大于等于0小于壹的自由数