五、引用类型
5.1 obj 用obj.pro 表示属性
5.2 array length不是只读 array[length-1] array[length]=? 直接赋值
5.2.1 转换方法 toLocaleString()、 toString()和 valueOf()方法 join()
5.2.2 栈方法 栈数据结构的访问规则是 LIFO(后进先出) push() pop()移除并返回最后一项
5.2.3 队列方法 而队列数据结构的访问规则是 FIFO(First-In-First-Out,先进先出)。 shift()返回并删除第一项 unshift()
5.2.4 重排序方法 reverse()和 sort() 返回值是经过排序之后的数组
sort 升序
function compare(val1,val2) {
if(val1 < val2) { return -1;} //-1 就不sort
else if(val1 > val2) { return 1;} //1就sort
else { return 0;}
}
sort(compare); //升序排列
5.2.5 操作方法
concat() 合并数组 参数可一个或多个数组 也可以是字符串 array.concat() //返回新数组 不影响原数组
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"); // 从位置 1 开始插入两项
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,返回的数组中只包含一项
5.2.6 位置方法 indexOf() lastIndexOf()
var person = { name: "Nicholas" };
var people = [{ name: "Nicholas" }];
var morePeople = [person];
alert(people.indexOf(person)); //-1
alert(morePeople.indexOf(person)); //0
5.2.7 迭代方法
every():对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回 true。
filter():对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。
forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
some():对数组中的每一项运行给定函数,如果该函数对任一项返回 true,则返回 true。
5.2.8 归并方法
reduce() reduceRight() 接收 4 个参数:前一个值、当前值、项的索引和数组对象。
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
return prev + cur;
});
alert(sum); //15
5.3 Date类型
new Date() 获取当前时间和日期
Date.parse()和 Date.UTC() 根据特定的日期和时间创建日期对象 参数为日期格式 返回毫秒数
Data.now()方法,返回表示调用这个方法时的日期和时间的毫秒数
5.3.1 日期格式化法
toDateString()——以特定于实现的格式显示星期几、月、日和年;
toTimeString()——以特定于实现的格式显示时、分、秒和时区;
toLocaleDateString()——以特定于地区的格式显示星期几、月、日和年;
toLocaleTimeString()——以特定于实现的格式显示时、分、秒;
toUTCString()——以特定于实现的格式完整的 UTC 日期。
5.3.2 日期时间组件方法
getTime() 返回表示日期的毫秒数
getFullYear() // 返回2018
getMonth() // 从0 开始
getDate() // 1-31
5.4 RegExp 类型 正则表达式
5.5 function类型
5.5.1 没有重载
5.5.2 函数声明
5.5.3 作为值的函数 可做参数传递 不带括号
5.5.4 函数内部属性 argument this
function factorial(num){
if (num <=1) {
return 1;
} else {
return num * arguments.callee(num-1) // 等价于num*factorial(num-1) 降低耦合
}
}
5.5.5 函数属性和方法
length 接收参数的个数
prototype 是保存它们所有实例方法的真正所在。 toString()和 valueOf()等方法实际上都保存在 prototype 名下,只不过是通过各自对象的实例访问罢了
非继承而来的方法: apply()和 call() 都是在特定的作用域中调用函数,实际上等于设置函数体内 this 对象的值
apply()方法接收两个参数:一个是在其中运行函数的作用域,另一个是参数数组。
function sum(num1, num2){
return num1 + num2;
}
function callSum1(num1, num2){
return sum.apply(this, arguments); // 传入 arguments 对象
}
function callSum2(num1, num2){
return sum.apply(this, [num1, num2]); // 传入数组
}
alert(callSum1(10,10)); //20
alert(callSum2(10,10)); //20
call()方法,第一个参数是 this 值没有变化,变化的是其余参数都直接传递给函数。
function sum(num1, num2){
return num1 + num2;
}
function callSum(num1, num2){
return sum.call(this, num1, num2);
}
alert(callSum(10,10)); //20
传递参数并非 apply()和 call()真正的用武之地;它们真正强大的地方是能够扩充函数赖以运行的作用域。
5.6 单体内置对象
Math.min() Math.max() Math.random() Math.abs() Math.pow(num,power)
JS高级程序设计 第五章
最新推荐文章于 2025-05-17 10:21:00 发布