javascript高级程序设计笔记(第五章)

1.Object类型
(1)var person = new Object();或者{}
person.name = “Nicholas”;
person.age = 29;
(2)var person = {
name : “Nicholas”,
age : 29
};属性名也可以是字符串
(3)对象属性可以用两种方式表示
alert(person[“name”]); //”Nicholas”
alert(person.name); //”Nicholas
2.Array类型
(1)每一项可以是不同的类型
var colors = new Array(“red”, “blue”, “green”);
var colors = new Array(20);
var colors = new Array();
var colors = Array(3);
var colors = [“red”, “blue”, “green”];
var names = []; // 创建一个空数组
var values = [1,2,]; // 不要这样!这样会创建一个包含2 或3 项的数组
var options = [,,,,,]; // 不要这样!这样会创建一个包含5 或6 项的数组
数组的length 属性很有特点——它不是只读的。因此,通过设置这个属性,可以从数组的末尾移除项或向数组中添加新项。没有的会是undefined
colors[colors.length] = “black”; //(在位置3)添加一种颜色
var colors = [“red”, “blue”, “green”]; // 创建一个包含3 个字符串的数组colors[99] = “black”; // (在位置99)添加一种颜色alert(colors.length); // 100
(2)检测数组
if (value instanceof Array){
//对数组执行某些操作
}
if (Array.isArray(value)){
//对数组执行某些操作
}
(3)转换方法
所有对象都具有toLocaleString()、toString()和valueOf()方法。调用数组的toString()方法会返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。而调用valueOf()返回的还是数组。
alert(colors.join(“||”)); //red||green||blue
ECMAScript 为数组专门提供了push()和pop()方法,以便实现类似栈的行为。
结合使用shift()和push()方法,可以像使用队列一样使用数组。
同时使用unshift()和pop()方法,可以从相反的方向来模拟队列,即在数组的前端添加项,从数组末端移除项。
reverse()和sort()。即使数组中的每一项都是数值,sort()方法比较的也是字符串。values.sort(compare);
如果传递给concat()方法的是一或多个数组,则该方法会将这些数组中的
每一项都添加到结果数组中。如果传递的值不是数组,这些值就会被简单地添加到结果数组的末尾。
var colors = [“red”, “green”, “blue”, “yellow”, “purple”];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);
alert(colors2); //green,blue,yellow,purple
alert(colors3); //green,blue,yellow
indexOf()和lastIndexOf()。这两个方法都接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中,indexOf()方法从数组的开头(位置0)开始向后查找,lastIndexOf()方法则从数组的末尾开始向前查找。
 every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。
 filter():对数组中的每一项运行给定函数,返回该函数会返回true 的项组成的数组。
 forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
 map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
 some():对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。
以上方法都不会修改数组中的包含的值。
var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.every(function(item, index, array){
return (item > 2);
});
alert(everyResult); //false
var someResult = numbers.some(function(item, index, array){
return (item > 2);
});
alert(someResult); //true
var numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(item, index, array){
return (item > 2);
});
alert(filterResult); //[3,4,5,4,3]
var numbers = [1,2,3,4,5,4,3,2,1];
var mapResult = numbers.map(function(item, index, array){
return item * 2;
});
alert(mapResult); //[2,4,6,8,10,8,6,4,2]
reduce()和reduceRight()。这两个方法都会迭
代数组的所有项,然后构建一个最终返回的值。其中,reduce()方法从数组的第一项开始,逐个遍历到最后。而reduceRight()则从数组的最后一项开始,向前遍历到第一项。
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
return prev + cur;
});
alert(sum); //15

3.Date类型
var now = new Date();
var someDate = new Date(Date.parse(“May 25, 2004”));
var someDate = new Date(“May 25, 2004”);
Date.UTC()
简化了使用Data 对象分析代码的工作。例如:
//取得开始时间
var start = Date.now();
//调用函数
doSomething();
//取得停止时间
var stop = Date.now(),
result = stop – start;
至于Date 类型的valueOf()方法,则根本不返回字符串,而是返回日期的毫秒表示。因此,可以方便使用比较操作符(小于或大于)来比较日期值。
Date 类型还有一些专门用于将日期格式化为字符串的方法,这些方法如下。
 toDateString()——以特定于实现的格式显示星期几、月、日和年;
 toTimeString()——以特定于实现的格式显示时、分、秒和时区;
 toLocaleDateString()——以特定于地区的格式显示星期几、月、日和年;
 toLocaleTimeString()——以特定于实现的格式显示时、分、秒;
 toUTCString()——以特定于实现的格式完整的UTC 日期。
getTime() 返回表示日期的毫秒数;与valueOf()方法返回的值相同
setTime(毫秒) 以毫秒数设置日期,会改变整个日期
getFullYear() 取得4位数的年份(如2007而非仅07)
getUTCFullYear() 返回UTC日期的4位数年份
setFullYear(年) 设置日期的年份。传入的年份值必须是4位数字(如2007而非仅07)
setUTCFullYear(年) 设置UTC日期的年份。传入的年份值必须是4位数字(如2007而非仅07)
getMonth() 返回日期中的月份,其中0表示一月,11表示十二月
getUTCMonth() 返回UTC日期中的月份,其中0表示一月,11表示十二月
setMonth(月) 设置日期的月份。传入的月份值必须大于0,超过11则增加年份
setUTCMonth(月) 设置UTC日期的月份。传入的月份值必须大于0,超过11则增加年份
getDate() 返回日期月份中的天数(1到31)
getUTCDate() 返回UTC日期月份中的天数(1到31)
setDate(日) 设置日期月份中的天数。如果传入的值超过了该月中应有的天数,则增加月份
setUTCDate(日) 设置UTC日期月份中的天数。如果传入的值超过了该月中应有的天数,则增加月份
getDay() 返回日期中星期的星期几(其中0表示星期日,6表示星期六)
getUTCDay() 返回UTC日期中星期的星期几(其中0表示星期日,6表示星期六)
getHours() 返回日期中的小时数(0到23)
getUTCHours() 返回UTC日期中的小时数(0到23)
setHours(时) 设置日期中的小时数。传入的值超过了23则增加月份中的天数
setUTCHours(时) 设置UTC日期中的小时数。传入的值超过了23则增加月份中的天数
getMinutes() 返回日期中的分钟数(0到59)
getUTCMinutes() 返回UTC日期中的分钟数(0到59)
setMinutes(分) 设置日期中的分钟数。传入的值超过59则增加小时数
setUTCMinutes(分) 设置UTC日期中的分钟数。传入的值超过59则增加小时数
getSeconds() 返回日期中的秒数(0到59)
getUTCSeconds() 返回UTC日期中的秒数(0到59)
setSeconds(秒) 设置日期中的秒数。传入的值超过了59会增加分钟数
setUTCSeconds(秒) 设置UTC日期中的秒数。传入的值超过了59会增加分钟数
getMilliseconds() 返回日期中的毫秒数
getUTCMilliseconds() 返回UTC日期中的毫秒数
setMilliseconds(毫秒) 设置日期中的毫秒数
setUTCMilliseconds(毫秒) 设置UTC日期中的毫秒数
getTimezoneOffset() 返回本地时间与UTC时间相差的分钟数。

4.RegExp 类型
var expression = / pattern / flags ;
flags: g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即 停止;
 i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写;
 m:表示多行(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模 式匹配的项。
partten( [ { \ ^ $ | ) ? * + .]} 这些元字符在正则表达式中都有一或多种特殊用途,因此如果想要匹配字符串中包含的这些字符,就必须对它们进行转义。
 global:布尔值,表示是否设置了g 标志。
 ignoreCase:布尔值,表示是否设置了i 标志。
 lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0 算起。
 multiline:布尔值,表示是否设置了m 标志。
 source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。

 5。Function 类型
 function sum (num1, num2) {
    return num1 + num2;
    }
    这与下面使用函数表达式定义函数的方式几乎相差无几。
    var sum = function(num1, num2){
    return num1 + num2;
    };
    var sum = new Function("num1", "num2", "return num1 + num2"); // 不推荐
     function sum(num1, num2){
        return num1 + num2;
        }
        alert(sum(10,10)); //20
        var anotherSum = sum;
        alert(anotherSum(10,10)); //20
        sum = null;
        alert(anotherSum(10,10)); //20
    没有重载(深入理解)
    function callSomeFunction(someFunction, someArgument){
        return someFunction(someArgument);
    }

    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: "Zachary", age: 28}, {name: "Nicholas", age: 29}];
        data.sort(createComparisonFunction("name"));
        alert(data[0].name); //Nicholas
        data.sort(createComparisonFunction("age"));
        alert(data[0].name); //Zachary

在函数内部,有两个特殊的对象:arguments 和this。其中,arguments 在第3 章曾经介绍过,它是一个类数组对象,包含着传入函数中的所有参数。虽然arguments 的主要用途是保存函数参数,但这个对象还有一个名叫callee 的属性,该属性是一个指针,指向拥有这个arguments 对象的函数。
严格模式还有一个限制:不能为函数的caller 属性赋值,否则会导致错误。
因此函数也有属性和方法。每个函数都包含两个属性:length(参数长度) 和prototype(保存它们所有实例方法的真正所在):apply()和call()。
window.color = "red";
var o = { color: "blue" };
function sayColor(){
alert(this.color);
}
var objectSayColor = sayColor.bind(o);
objectSayColor(); //blue

6.基本包装类型
    ECMAScript 还提供了3 个特殊的引用类型:Boolean、Number 和String。这些类型与本章介绍的其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为。实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据
    var value = "25";
var number = Number(value); //转型函数
alert(typeof number); //"number"
var obj = new Number(value); //构造函数
alert(typeof obj); //"object"
很多看具体书本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值