JavaScript高级程序设计笔记-引用类型
来源:互联网 发布:公共基础知识考试软件 编辑:程序博客网 时间:2024/05/02 02:07
1.object类型
创建object实例:
var person = new Object();
person.name = "Nocholas";
person.age = 29;
var person = {
name : "Nicholas",
age:29
};
function displayInfo(args){
var output = " ";
if(typeof args.name == "string"){
output += "name : " + args.name ;
}
if(typeof args.age == "number"){
output += "Age : " + args.age ;
}
}
displayInfo({
name : "Nicholas",
age : 29
})
访问对象属性:
2.Array类型
创建数组:
var colors = new Array();
var colors = new Array(20);
var colors = new Array("red","blue","green");
var colors = ["red","blue","green"];
var names = [ ];
var values = [1,2,]; //不要这样!会创建一个包含2或3项的数组
读取和设置数组的值:
var color0 = ["red","blue","green"];
alert(colors[0]); //显示第一项
color[2] = "black"; //修改第三项
color[3] = "brown"; //新增第四项
2.1检测数组
if(Array.isArray(value)){
//对数组执行操作
}
2.2转换方法
var colors = ["red","green","blue"];
alert(color.join("|")); //red|green|blue
2.3栈方法
2.4队列方法
2.5重排序方法
var values = [0, 1, 5, 10, 15];
values.sort();
alert(values); //0,1,10,15,5
function compare(value1, value2) {
if (value1 < value2) {
return -1;//如果第一个参数应该位于第二个之前则返回负数,降序则返回正数
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values); //0,1,5,10,15
2.6操作方法
var colors = ["red", "green", "blue"];
var colors2 = colors.concat("yellow", ["black", "brown"]);
alert(colors); //red,green,blue
alert(colors2); //red,green,blue,yellow,black,brown
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
2.7位置方法
var numbers = [1,2,3,4,5,4,3,2,1];
alert(numbers.indexOf(4)); //3
alert(numbers.lastIndexOf(4)); //5
alert(numbers.indexOf(4, 4)); //5
alert(numbers.lastIndexOf(4, 4)); //3
var person = { name: "Nicholas" };
var people = [{ name: "Nicholas" }];
var morePeople = [person];
alert(people.indexOf(person)); //-1
alert(morePeople.indexOf(person)); //0
2.8迭代方法
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
2.9归并方法
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 someDate = new Date(Date.parse("May 25, 2004"));
var someDate = new Date("May 25, 2004");
- “月/日/年”,如 6/13/2004;
- “英文月名 日,年”,如 January 12,2004;
- “英文星期几 英文月名 日 年 时:分:秒 时区”,如 Tue May 25 2004 00:00:00 GMT-0700。
- ISO 8601 扩展格式 YYYY-MM-DDTHH:mm:ss.sssZ(例如 2004-05-25T00:00:00)。只有兼容ECMAScript 5的实现支持这种格式。
// GMT 时间 2005 年 5 月 5 日下午 5:55:55
var allFives = new Date(Date.UTC(2005, 4, 5, 17, 55, 55));
// 本地时间 2005 年 5 月 5 日下午 5:55:55var allFives = new Date(2005, 4, 5, 17, 55, 55);
//取得开始时间
var start = Date.now();
//调用函数
doSomething();
//取得停止时间
var stop = Date.now(),
result = stop – start;
//取得开始时间
var start = +new Date();
//调用函数
doSomething();
//取得停止时间
var stop = +new Date(),
result = stop - start;
日期/时间组件方法:
4.RegExp类型
//匹配字符串中所有"at"的实例
var pattern1 = /at/g;
//匹配第一个"bat"或"cat",不区分大小写
var pattern2 = /[bc]at/i;
//匹配所有以"at"结尾的 3 个字符的组合,不区分大小写
var pattern3 = /.at/gi;
//匹配所有".at",不区分大小写,需要转义 var pattern4 = /\.at/gi;
var pattern2 = new RegExp("[bc]at", "i");
4.1RegExp实例属性
- global :布尔值,表示是否设置了 g 标志。
- ignoreCase :布尔值,表示是否设置了 i 标志。
- lastIndex :整数,表示开始搜索下一个匹配项的字符位置,从 0 算起。
- multiline :布尔值,表示是否设置了 m 标志。
- source :正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。
var pattern1 = /\[bc\]at/i;
alert(pattern1.global); //false
alert(pattern1.ignoreCase); //true
alert(pattern1.multiline); //false
alert(pattern1.lastIndex); //0
alert(pattern1.source); //"\[bc\]at"
var pattern2 = new RegExp("\\[bc\\]at", "i");
alert(pattern2.global); //false
alert(pattern2.ignoreCase); //true
alert(pattern2.multiline); //false
alert(pattern2.lastIndex); //0
alert(pattern2.source); //"\[bc\]at"
4.2RegExp实例方法
var pattern2 = /.at/g;
var matches = pattern2.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern2.lastIndex); //3
matches = pattern2.exec(text);
alert(matches.index); //5
alert(matches[0]); //bat
alert(pattern2.lastIndex); //8
var text = "000-00-0000";
var pattern = /\d{3}-\d{2}-\d{4}/;
if (pattern.test(text)){
alert("The pattern was matched.");
}
正则表达式基本语法:
两个特殊的符号'^'和'$'。他们的作用是分别指出一个字符串的开始和结束。例子如下:
- "^The":表示所有以"The"开始的字符串("There","The cat"等);
- "of despair$":表示所以以"of despair"结尾的字符串;
- "^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;
- "notice":表示任何包含"notice"的字符串。
其它还有'*','+'和'?'这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示“没有或
更多”,“一次或更多”还有“没有或一次”。下面是几个例子:
"ab*":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……);
"ab+":表示一个字符串有一个a后面跟着至少一个b或者更多;
"ab?":表示一个字符串有一个a后面跟着零个或者一个b;
"a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b。
你也可以使用范围,用大括号括起,用以表示重复次数的范围。
"ab{2}":表示一个字符串有一个a跟着2个b("abb");
"ab{2,}":表示一个字符串有一个a跟着至少2个b;
"ab{3,5}":表示一个字符串有一个a跟着3到5个b。
请注意,你必须指定范围的下限(如:"{0,2}"而不是"{,2}")。还有,你可能注意到了,'*','+'和'?'相当于"{0,}","{1,}"和"{0,1}"。
还有一个'|',表示“或”操作:
"hi|hello":表示一个字符串里有"hi"或者"hello";
"(b|cd)ef":表示"bef"或"cdef";
"(a|b)*c":表示一串"a""b"混合的字符串后面跟一个"c";
'.'可以替代任何字符:
"a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字;
"^.{3}$":表示有任意三个字符的字符串(长度为3个字符);
方括号表示某些字符允许在一个字符串中的某一特定位置出现:
"[ab]":表示一个字符串有一个"a"或"b"(相当于"a¦b");
"[a-d]":表示一个字符串包含小写的'a'到'd'中的一个(相当于"a¦b¦c¦d"或者"[abcd]");
"^[a-zA-Z]":表示一个以字母开头的字符串;
"[0-9]%":表示一个百分号前有一位的数字;
",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。
你也可以在方括号里用'^'表示不希望出现的字符,'^'应在方括号里的第一位。(如:"%[^a-zA-Z]%"表示两个百分号中不应该出现字母)。
为了逐字表达,你必须在"^.$()¦*+?{\"这些字符前加上转义字符'\'。
请注意在方括号中,不需要转义字符。
正则表达式验证控制文本框的输入字符类型:
正则表达式应用:
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"); // 不推荐,会导致解析两次代码,第一次是解析常规ECMAScript代码,第二次是解析传入构造函数中的字符串
5.1没有重载
function addSomeNumber(num){
return num + 100;
}
function addSomeNumber(num) {
return num + 200;
}
var result = addSomeNumber(100); //300
5.2函数声明与函数表达式
5.3作为值的函数
function callSomeFunction(someFunction, someArgument){
return someFunction(someArgument);
}
function add10(num){
return num + 10;
}
var result1 = callSomeFunction(add10, 10);
alert(result1); //20
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
5.4函数内部属性
function factorial(num){
if (num <=1) {
return 1;
} else {
return num * arguments.callee(num-1);//消除函数的执行与函数名紧密耦合的现象,无论引用函数时使用的是什么名字,都可以保证正常完成递归调用
}
}
function outer(){
inner();
}
function inner(){
alert(arguments.callee.caller);
}
outer();
5.5函数属性和方法
function callSum1(num1, num2){
return sum.apply(this, arguments); // 传入 arguments 对象
}
function callSum2(num1, num2){
return sum.apply(this, [num1, num2]); // 传入数组
}
function callSum(num1, num2){
return sum.call(this, num1, num2);
}
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
window.color = "red";
var o = { color: "blue" };
function sayColor(){
alert(this.color);
}
var objectSayColor = sayColor.bind(o);
objectSayColor(); //blue
6.基本包装类型
var s1 = "some text";
s1.color = "red";
alert(s1.color); //undefined,第二行创建的String对象在执行第三行代码时已经被销毁了,第三行代码又创建自己的String对象,而该对象没有color属性
var value = "25";
var number = Number(value); //转型函数
alert(typeof number); //"number"
var obj = new Number(value); //构造函数
alert(typeof obj); //"object"
6.1Boolean类型
6.2Number类型
var num = 10;
alert(num.toString()); //"10"
alert(num.toString(2)); //"1010"
alert(num.toString(8)); //"12"
alert(num.toString(10)); //"10"
alert(num.toString(16)); //"a"
var num = 10;
alert(num.toFixed(2)); //"10.00"
var num = 10;
alert(num.toExponential(1)); //"1.0e+1"
var num = 99;
alert(num.toPrecision(1)); //"1e+2"
alert(num.toPrecision(2)); //"99"
alert(num.toPrecision(3)); //"99.0"
6.3String类型
var stringValue = "hello world";
alert(stringValue.charAt(1)); //"e"
alert(stringValue.charCodeAt(1)); // 输出"101"
alert(stringValue[1]); //"e"
var stringValue = "hello ";
var result = stringValue.concat("world", "!");
alert(result); //"hello world!"
alert(stringValue); //"hello"
var stringValue = "hello world";
alert(stringValue.slice(3)); //"lo world"
alert(stringValue.substring(3)); //"lo world"
alert(stringValue.substr(3)); //"lo world"
alert(stringValue.slice(3, 7)); //"lo w"
alert(stringValue.substring(3,7)); //"lo w"
alert(stringValue.substr(3, 7)); //"lo worl"
var stringValue = "hello world";
alert(stringValue.slice(-3)); //"rld"
alert(stringValue.substring(-3)); //"hello world"
alert(stringValue.substr(-3)); //"rld"
alert(stringValue.slice(3, -4)); //"lo w"
alert(stringValue.substring(3, -4)); //"hel"
alert(stringValue.substr(3, -4)); //"" (空字符串)
var stringValue = "Lorem ipsum dolor sit amet, consectetur adipisicing elit";
var positions = new Array();
var pos = stringValue.indexOf("e");
while(pos > -1){
positions.push(pos);
pos = stringValue.indexOf("e", pos + 1);//确保每次新的搜索都从上一次找到的子字符串的后面开始,每次搜索返回的位置依次被保存在数组positions中,以便将来使用
}
alert(positions); //"3,24,32,35,52"
var stringValue = " hello world ";
var trimmedStringValue = stringValue.trim();
alert(stringValue); //" hello world "
alert(trimmedStringValue); //"hello world"
var text = "cat, bat, sat, fat";
var pattern = /.at/;
//与 pattern.exec(text)相同
var matches = text.match(pattern);
alert(matches.index); //0
alert(matches[0]); //"cat"
alert(pattern.lastIndex); //0
var text = "cat, bat, sat, fat";
var pos = text.search(/at/);
alert(pos); //1
var text = "cat, bat, sat, fat";
var result = text.replace("at", "ond");
alert(result); //"cond, bat, sat, fat"
result = text.replace(/at/g, "ond");
alert(result); //"cond, bond, sond, fond"
function htmlEscape(text){
return text.replace(/[<>"&]/g, function(match, pos, originalText){
switch(match){
case "<":
return "<";
case ">":
return ">";
case "&":
return "&";
case "\"":
return """;
}
});
}
alert(htmlEscape("<p class=\"greeting\">Hello world!</p>"));
//<p class="greeting">Hello world!</p>
var colorText = "red,blue,green,yellow";
var colors1 = colorText.split(","); //["red", "blue", "green", "yellow"]
var colors2 = colorText.split(",", 2); //["red", "blue"]
var colors3 = colorText.split(/[^\,]+/); //["", ",", ",", ",", ""]
- 如果字符串在字母表中应该排在字符串参数之前,则返回一个负数(大多数情况下是 -1 ,具体的值要视实现而定);
- 如果字符串等于字符串参数,则返回 0 ;
- 如果字符串在字母表中应该排在字符串参数之后,则返回一个正数(大多数情况下是 1 ,具体的值同样要视实现而定)。
var stringValue = "yellow";
alert(stringValue.localeCompare("brick")); //1
alert(stringValue.localeCompare("yellow")); //0
alert(stringValue.localeCompare("zoo")); //-1
alert(String.fromCharCode(104, 101, 108, 108, 111)); //"hello"
7.单体内置对象
7.1Global对象
encodeURIComponent() 方法则会使用对应的编码替换所有非字母数字字符。
var uri = "http://www.wrox.com/illegal value.htm#start";
//"http://www.wrox.com/illegal%20value.htm#start"
alert(encodeURI(uri));
//"http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start"
alert(encodeURIComponent(uri));
7.2Math对象
var values = [1, 2, 3, 4, 5, 6, 7, 8];
var max = Math.max.apply(Math, values);
- Math.ceil() 执行向上舍入,即它总是将数值向上舍入为最接近的整数;
- Math.floor() 执行向下舍入,即它总是将数值向下舍入为最接近的整数;
- Math.round() 执行标准舍入,即它总是将数值四舍五入为最接近的整数(这也是我们在数学课上学到的舍入规则)。
var colors = ["red", "green", "blue", "yellow", "black", "purple", "brown"];
var color = colors[selectFrom(0, colors.length-1)];
alert(color); // 可能是数组中包含的任何一个字符串
8.小结
- Object 是一个基础类型,其他所有类型都从 Object 继承了基本的行为;
- Array 类型是一组值的有序列表,同时还提供了操作和转换这些值的功能;
- Date 类型提供了有关日期和时间的信息,包括当前日期和时间以及相关的计算功能;
- RegExp 类型是 ECMAScript 支持正则表达式的一个接口,提供了最基本的和一些高级的正则表达式功能。
- 每个包装类型都映射到同名的基本类型;
- 在读取模式下访问基本类型值时,就会创建对应的基本包装类型的一个对象,从而方便了数据
- 操作;
- 操作基本类型值的语句一经执行完毕,就会立即销毁新创建的包装对象。
- JavaScript高级程序设计笔记-引用类型
- Javascript高级程序设计第二版第五章--引用类型--笔记
- JavaScript高级程序设计学习笔记——引用类型1
- 《JavaScript高级程序设计》读书笔记(二):引用类型
- 《JavaScript高级程序设计》读书笔记--5-引用类型
- JavaScript高级程序设计(引用类型)
- JavaScript高级程序设计之引用类型之Object 类型第5.1讲敏敏笔记
- JavaScript高级程序设计之引用类型之Array 类型第5.2讲笔记
- JavaScript高级程序设计之引用类型之Date 类型第5.3讲笔记
- JavaScript高级程序设计之引用类型之RegExp 类型第5.4讲笔记
- JavaScript高级程序设计之引用类型之Function 类型第5.5讲笔记
- JavaScript高级程序设计之引用类型之基本包装类型第5.6讲笔记
- JavaScript高级程序设计学习笔记——引用类型2Function类型(重要)
- javascript 高级程序设计 第5章 引用类型 Object类型
- 《JavaScript高级程序设计》--Function类型笔记
- 《JavaScript高级程序设计 第三版》学习笔记 (三)引用类型详解
- javascript高级程序设计学笔记——第五章 引用类型
- 《JavaScript高级程序设计》笔记——chapter5 引用类型(Object/Array)
- Noi 题库:求小数的某一位
- s5p4418 PWM亮度调节修改
- Pylot——跨平台的网站压力测试工具
- 选择排序
- 【codevs 1961】 躲避大龙
- JavaScript高级程序设计笔记-引用类型
- 代码动态设置图标的大小和位置的工具类
- hello Kotlin
- poj1426: Find the Multiple
- 使用伪造,更好地测试
- python functools模块
- 分享一款Web压力测试工具Pylot
- php 获取本周星期一到天的各自时间戳(从早上零点到晚上23:59)
- 用.msi安装node时安装失败,出现rolling back action