引用类型
引用类型的值是引用类型的一个实例。引用类型是一种数据结构。用于将数据和功能组织在一起。
5.1 Object类型
功能:在应用程序中存储和传输数据
创建Object的2种方式:
- new操作符后跟Object构造函数。
var person = new Object(); person.name = "flyer"; person.age = 26;
2. 使用对象字面量表示法
/* * 在对象字面量中使用逗号来分隔不同的属性,最后一个属性后不能加逗号,会在ie和opera中报错 *属性名也可以使用字符串 */ var person ={ name : "flyer", age : 26 };
对象字面量语法更优,要求的代码量少,给人封装数据的感觉!对象字面量也是向函数传递大量可选参数的首选方式
function displayInfo(args) { var output = ""; if (typeof args.name == "string"){ output += "Name: " + args.name + "\n"; } if (typeof args.age == "number") { output += "Age: " + args.age + "\n"; } alert(output); } displayInfo({ name: "Nicholas", age: 29 }); displayInfo({ name: "Greg" });
5.2 Array类型
ECMAScript数组的每一项可以保存任何类型的数据。
创建数组的2种方式:
1. 使用Array构造函数
var colors = new Array(); /*也可给构造函数传递数量*/ var colors = new Array(10); /*也可给构造函数传递数量应该包含的项*/ var colors = new Array("red","blue","green");
2. 使用数字字面量表示法
/*数字字面量由一对包含数组项的方括号表示,多个之间用逗号分隔。*/ var colors = ["red","blue","green"]; /*数组的length属性不是只读的。设置这个属性,可以从数组末尾移除项或向数组中添加新项*/ colors.length = 2; alert(colors[2]); //undefined
5.2.1转换方法
toString(),toLocaleString(),valueOf()方法。
其中调用数组的方法toString()和valueOf()方法会返回相同的值。
var colors = ["red","blue","green"]; alert(colors.toString()); alert(colors.valueOf()); alert(colors); //后台调用toString()方法toLocaleString()除了会返回上面两个方法外,也会创建一个数组值的以逗号分隔的字符串。区别是:调用的每一项是toLocaleString()方法,而不是toString()。
join()方法可以使用不同的分隔符来构建字符串,join 方法重现了toString()的输出。
var colors = ["red", "green", "blue"]; alert(colors.join("||")); //red||green||blue
5.2.2栈方法
数组可以像栈一样,栈是一种LIFO(last-in-first-out后进先出)的数据结构,最新添加的项最早被移除。可以限制插入和删除项的数据结构。
数组的插入或移除只发现在栈的顶部。
a) push() 添加到数组的末尾
b) pop() 从数组末尾移除最后一项,然后返回移除的项
5.2.3队列方法
队列是一种FIFO(first-in-first-out先进先出)的数据结构。
shift() 移除数组中的第一个项并返回该项
unshift() 能在数组前端添加任意个项并返回新数组的长度
5.2.4重排序方法
reverse() 反转数组项的顺序(不够灵活)
sort() 默认按升序排列数组项-即最小的值在最前面,会调用toString()转型方法。也可以接受一个比较函数做为参数
var values = [0,1,5,16,4]; values.sort(); alert(values); //0,1,16,4,5
5.2.5操作方法
1) concat()方法可以基于当前数组中的所有项创建一个新数组。(创建当前数组副本,将接受到的参数添加到副本的未尾,返回新构建的数组。)如果传递的 是一或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中。如果传递的值不是数组,这些值添加到结果的末尾。
2)slice()
二个参数slice(a,b)指返回项的起始和结束的位置之间的项(不包括结束位置的项)。
一个参数slice(a)返回从该参数指定位置开始到当前数组末尾的所有项。
3)splice()方法用于删除、插入或替换数组的元素。
语法 arrayObject.splice(index,howmany,element1,.....,elementX)参数 描述
index 必需。规定从何处添加/删除元素。 开始插入和(或)删除的数组元素的下标,必须是数字。
howmany 必需。规定应该删除多少元素。必须是数字,可以是 0。 如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
element1 可选。规定要添加到数组的新元素。从 index 所指的下标处开始插入。
elementX 可选。可向数组添加若干元素。
返回值
如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。
说明
splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。
注释
注意:splice() 方法与 slice() 方法的作用是不同的,splice() 方法会直接对数组进行修改。
var colors = ["red", "green", "blue"]; var removed = colors.splice(0,1); //删除第一项 alert(colors); //green,blue alert(removed); //red - 返回的数组中只包含一项 removed = colors.splice(1, 0, "yellow", "orange"); //从位置一开始插入两项 alert(colors); //green,yellow,orange,blue alert(removed); //返回一个空数组 removed = colors.splice(1, 1, "red", "purple"); //插入两项,删除一项 alert(colors); //green,red,purple,orange,blue alert(removed); //yellow - 返回的数组中只包含一项感谢作者,让我了解更透彻:http://hi.baidu.com/jinwb/item/e240190bac0d28036d90487c
5.3 Date类型
Date.parse()接收一个表示日期的字符串参数,尝试根据这个字符串返回相应日期的毫秒数。
Date.UTC()方法也是返回表示日期的毫秒数,但与Date.parse()在构建值时使用不同的信息。
5.3.1继承的方法
重写了toLocaleString(),toString(),(在调试代码时用)valueOf()(比较日期值)
5.3.2日期格式化的方法
toDateString(); //星期几、月、日和年
toTimeString(); // 时、分、秒和时区
toLocaleDateString(); //特定于地区的格式显示星期几、月、日和年
toLocaleTimeString(); //特定于时、分、秒
toUTCString() //特定于实现的格式完整的UTC日期
5.3.3日期/时间组件方法(只列出常用的几项)
getTime() //日期毫秒数
setTime();//设置毫秒数
getFullYear():// 取得4位数的年份
setFullYear()// 设置日期的年份(4位数)
5.4 RegExp类型
var expression = / pattern(模式) / flags(标志);
g—表示全局(global)
i—表示不区分大小写(case-insensitive)
m—表示多行(multiline)
5.4.1RegExp实例属性
global—布尔值,是否设置了g标志
ignoreCase—布尔值,是否设置了i标志
lastIndex—整数,表示开始搜索下一个匹配项的字符位置,从0算起
multiline—布尔值,表示是否设置了m标志
source—正则表达式的字符串表示,按照字面量形式返回
5.4.2RegExp实例方法
exec(): 返回包含第一个匹配项信息的数组,包含两个额外的属性:index和input。
index:匹配项在字符串中的位置。
input:应用正则表达式的字符串。
test(): 在模式与参数匹配的情况下,返回true,否则返回false
5.5Function类型
函数实际上是对象,每个函数都是Function类型的实例,与其他引用类型一样具有属性和方法,函数名实际上是指向函数对象的一个指针,不会与某个函数绑定。
/*函数声明语法*/ function sum(num1, num2){ return num1 + num2; }
/*函数表达式定义*/ var sum = function(num1, num2){ return num1 + num2; };
5.51没有重载
5.5.2函数声明与函数表达式
解析器先读取函数声明,使其咋子执行任何代码前可用,表达式是必须等到解析器执行到它所在的代码行才会真正执行。
5.5.3作为值的函数
将一个函数作为另一个函数的结果返回。
/* *callSomeFunction是通用的,无论第一个参数中传递进来的是什么函数,都会返回执行第一个参数后的*结果。 */ function callSomeFunction(someFunction, someArgument){ return someFunction(someArgument); } function add10(num){ return num+10; } var result1 = callSomeFunction(add10,10); alert(result1); function getGreeting(name){ return "hello," + name; } var result2 = callSomeFunction(getGreeting,"flyer"); alert(result2);
/* *从一个函数中返回另一个函数。 *simple:根据某个对象属性对数组进行排序 */ function createComparisonFunction(propertyName){ return function(object1,object2){ var value1 = object1[propertyName]; var value2 = object2[propertyName]; if (value1 < value2){ return -1; }else if (value1 > value2) { return 1 }else{ return 0; } }; } var data = [{name:"flyer", age:26},{name:"bird",age:27}]; data.sort(createComparisonFunction("name")); alert(data[0].name);//bird data.sort(createComparisonFunction("age")); alert(data[0].name);//flyer
5.5.4函数内部属性
arguments和this
arguments的主要用途是保存函数参数,还有一个callee的属性,是一个指针,指向拥有这个arguments对象的函数。
/* function factorial(num){ if(num <= 1){ return 1; }else{ return num * factorial(num-1) } } */ //为了消除耦合,可以使用arguments.callee function factorial(num){ if(num <= 1){ return 1; }else{ return num*arguments.callee(num-1) } } var trueFactorial = factorial; factorial = function(){ return 0;//返回0的函数赋值给factorial变量 }; alert(trueFactorial(5));//120 alert(factorial(5));//0
this是函数在执行时所处的作用域。
用call,apply动态改变this指向。
5.5.5函数的属性和方法
每个函数都包含2个属性:
1)length:表示函数希望接受的命名参数的个数
2)prototype:保存它们所有实例方法
每个函数都包含2个非继承而来的方法:
1)apply()
接受两个参数,运行函数的作用域,参数数组(可以是Array的实例,也可以是arguments对象),
function sum(num1, num2){
return num1 + num2;
}
function callSum1(num1, num2){
return sum.apply(this, arguments);
}
function callSum2(num1, num2){
return sum.apply(this, [num1, num2]);
}
alert(callSum1(10,10)); //20
alert(callSum2(10,10)); //20
2)call()
传递给函数的参数必须逐个列举出来。
function sum(num1, num2){
return num1 + num2;
}
function callSum(num1, num2){
return sum.call(this, num1, num2);
}
alert(callSum(10,10)); //20
用途:在特定的作用域中调用函数,相当于设置函数体内this对象的值。
能够扩充函数赖以运行的作用域。
对象不需要与方法有任何耦合关系。
基本包装类型
相关推荐
JavaScript高级程序设计是每个前端开发者深入理解这门语言所必经之路。这篇学习笔记将带你探索JavaScript的核心概念,包括变量、数据类型、控制流、函数、对象和类等,这些都是构建复杂应用程序的基础。 首先,我们...
这份“JavaScript高级程序设计---笔记归类.pdf”文档显然详细整理了JavaScript的关键知识点,包括ECMAScript规范、DOM操作、数据类型、运算符、流程控制语句、函数以及面向对象编程等。 首先,ECMAScript是...
这本“JavaScript高级程序设计第四版”的学习笔记涵盖了JavaScript的各个方面,旨在帮助学生、开发者以及对编程感兴趣的人深入理解这一强大的脚本语言。这份笔记是针对毕设、课设、项目实训等实践性学习场景编写的,...
JavaScript高级程序设计学习笔记(四)主要探讨了JavaScript中的引用类型、Function类型、函数的声明与定义、函数表达式以及一些基本包装类型的相关知识。在JavaScript中,函数不仅仅是代码块,它们也是对象,具备...
JavaScript中内置了多种错误类型,这些类型用于表示不同类型的错误: - Error:基础错误类型,通常用于抛出自定义错误。 - EvalError:当eval()函数执行出错时抛出。 - RangeError:数值超出预期范围时触发。 - ...
JavaScript中的数据类型分为两大类:基本类型(Primitive Types)和引用类型(Reference Types)。基本类型包括Undefined、Null、Boolean、Number、String,它们是按值访问的,即变量直接保存了值本身。例如,当你...
JavaScript,作为一种广泛应用于网页和网络应用的...通过学习《JavaScript高级程序设计(第3版)》这样的专业书籍,不仅可以系统地梳理JavaScript的基础,还能了解到一些高级用法和最佳实践,对提升编程技能大有裨益。
随着学习深入,还可以掌握更高级的概念,如作用域、闭包、原型链,以及各种JavaScript库和框架,如jQuery、React或Vue.js等,从而能够设计和实现复杂的Web应用程序。在Node.js环境下,JavaScript还能用于服务器端...
标题: JavaScript高级程序设计(第3版)学习笔记7 js函数(上) 描述: 在JavaScript中,函数是具备魔幻效应的"房间"。函数不仅仅是一个执行代码的容器,还具有对象的特性,能够存储数据、参与运算、作为参数传递等,...
在深入探讨JavaScript高级编程技术之前,我们首先需要了解ECMAScript的基础知识。ECMAScript是由ECMA国际通过ECMA-262标准定义的脚本语言的标准化规范,它是JavaScript语言的基础。在这部分笔记中,我们将涵盖...
JavaScript是一种客户端脚本编程语言,它与HTML和XML等技术结合使用,用于创建交互式的网页。...随着学习的深入,还可以探索更高级的主题,如DOM操作、异步编程、闭包和模块化等,以提升JavaScript编程技能。
标签语句允许为语句添加一个标识符,供后续的break和continue语句引用,以控制程序的执行流程。需要注意的是,在JavaScript中,break和continue只能用在循环和switch语句中。 try-catch-finally是异常处理语句,...
JavaScript是Web开发中的核心语言,尤其对于前端开发者来说至关重要。《JavaScript高级程序设计》第三版是...在《JavaScript高级程序设计》第三版的学习过程中,结合实际项目练习,将有助于更好地理解和掌握这些概念。
JavaScript本质上也是一种类C语言,熟悉C语言的朋友,可以非常轻松的阅读这篇文章,甚至都可以跳过,不过建议你最好还是看一看,在介绍的同时,我可能会引用一些自认为不易理解且比较流行的用法。基础语法1、标识符...
### JavaScript高级程序设计阅读笔记(七):ECMAScript中的语句 #### 一、引言 本篇文章基于《JavaScript高级程序设计》一书第七章的内容进行总结与扩展,主要探讨了ECMAScript中的各种语句类型及其用法。通过...
压缩包中的“QT5相关资料”可能包含了QT5的官方文档、教程、示例代码和学习笔记。官方文档详细介绍了每个类和函数的用法,是学习QT5的重要参考资料。教程和示例代码可以帮助初学者快速上手,理解QT5的基本概念和实践...
综上所述,"经典、简单C#学习笔记"涵盖了C#语言从基础到进阶的全面内容,适合初学者入门,也对有一定经验的开发者有参考价值。通过深入理解和实践这些知识点,你将能够熟练掌握C#,并在各种应用场景中游刃有余。
正则表达式的学习笔记还简要提及了零宽断言,这是一种特殊的匹配模式,它匹配某些内容但不包括这些内容在匹配结果中。例如,“(?=exp)”是正向零宽断言,它匹配后面跟着“exp”的位置;“(?)”是反向零宽断言,匹配...