5.1 Object类型
//不指定大小var colors1 = new Array();//指定大小var colors2 = new Array(20); //指定数组项var color3 = new Array(‘red‘, ‘blue‘, ‘green‘);//省略new 操作符var color4 = Array(‘‘red‘, ‘blue‘, ‘green‘);var colors1 = [‘red‘, ‘blue‘, ‘green‘];//是哟那个字面量的BUG//这样会创建一个2(IE9+等)或3(IE8-)项的数组var values = [1 ,2, ];if(value instanceof Array){ //对数组进行某些操作}if(Array.isArray(value)){ //对数组执行某些操作}| IE9+ | Firefox4+ | Safari5+ | Opera10.5+ | Chrome |
push() : 接受任意数量的参数,逐个添加到数组末尾,并返回修改后数组的长度
**param{any} 要添加到数组末尾的值或引用**...**return {Number} 修改后数组的长度
pop() : 从数组末尾移除最后一项,减少数组的length值,然后返回移除的项
**return {any} 移除的项
var colors = new Array(); //创建一个数组var count = colors.push(‘red‘, ‘green‘); //推入两项alert(count); //2count = colors.push(black); //推入另一项alert(count); //3var item = colors.pop(); //取得最后一项alert(item); //‘black‘alert(colors.length); //2var colors = new Array();var count = colors.push(‘red‘, ‘green‘); //推入两项alert(count); //2count = colors.push(‘black‘); //推入另一项alert(count); //3var item = colors.shift(); //取得第一项alert(item); //‘red‘alert(colors.length); //2var colors = new Array();var count = colors.unshift(‘red‘, ‘green‘); //推入两项alert(count); //2count = colors.unshift(‘black‘); //推入另一项alert(count); //3var item = colors.pop(); //取得最后一项alert(item); //‘green‘alert(colors.length); //2var values = [1, 2, 3, 4, 5];values.reverse();alert(values); //5,4,3,2,1sort() : 接受一个比较函数函数来排序,默认按升序排列(调用每个数组项的toString()转型方法转化为字符串然后对字符串排序)//1.无参数var values = [0, 1, 5, 10, 15];values.sort();alert(values); //0, 1, 10, 15, 5//2.传入比较函数/**比较函数接受两个参数*/function compare(value1, value2){ //升序 if(value1 < value2){ return -1; }else if(value1 > value2){ return 1; }else{ return 0; }}/*function cpmpare(value1, value2){ return value1 - value2;}*/var values = [0, 1, 5, 10, 15];values.sort(compare);alert(values); //0, 1, 5, 10, 15var colors = [‘red‘, ‘green‘, ‘blue‘];var colors2 = colors.concat(‘yellow‘, [‘black‘, ‘brown‘]);alert(colors); //‘red, green, blue‘alert(colors2); //‘red, green, blue, black, brown‘var colors = [‘red‘, ‘green‘, ‘blue‘, ‘yellow‘, ‘purple‘];var colors2 = colors.slice(1);var colors3 = colors.slice(1,4);alert(colors); //‘red, green, blue, yellow, purple‘alert(colors2); //‘green, blue, yellow, purple‘alert(colors3); //‘green, blue, yellow‘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,返回的数组中只包含一项| IE9+ | Firefox2+ | Safari3+ | Opera9.5+ | Chrome |
| IE9+ | Firefox2+ | Safari3+ | Opera9.5+ | Chrome |
| IE9+ | Firefox2+ | Safari3+ | Opera9.5+ | Chrome |
var values = [1,2,3,4,5];var sum = values.reduce(function(prev,cur,index,array){ return prev + cur;});alert(sum); //15var values = [1,2,3,4,5];var sum = values.reduceRight(function(prev,cur,index,array){ return prev + cur;});alert(sum); //15| 第n个参数 | 代表 | 范围 | 默认值 | 必须 |
| 1 | 年 | (无) | (无) | 是 |
| 2 | 月 | 0-11 | (无) | 是 |
| 3 | 日 | 1-31 | 1 | 否 |
| 4 | 时 | 0-23 | 0 | 否 |
| 5 | 分 | 0-59 | 0 | 否 |
| 6 | 秒 | 0-59 | 0 | 否 |
| 7 | 毫秒 | 0-999 | 0 | 否 |
var nowDate = new Date(); //当前时间var specifyDate = new Date(1409540631971);var parseDate = new Date(‘May 25, 2014‘); //后台自动调用Date.parse()将字符串转为毫秒数var utcDate = new Date(2014, 4, 5, 17, 55, 55); //将根据本地时区转换为毫秒数(不同于Date.UTC(),后者参照GTC(格林尼治))var someDate = new Date(Date.parse(‘May 25, 2004‘));| 日期格式 | 例子 | 兼容性 |
| ‘月/日年‘ | ‘6/13/2004‘; | |
| ‘英文月 日, 年‘ | ‘January 12, 2004‘; | |
| YYYY-MM-DDTHH:mm:ss:sssZ | 2004-05-25-T00:00:00 | ECMAScript 5 |
//GMT时间2000年1月1日午夜零时var y2k = new Date(Date.UTC(2000,0));//GMT时间2014年9月1日上午10:53var y2k = new Date(Date.UTC(2014, 8, 1, 10, 53));| 第n个参数 | 代表 | 范围 | 默认值 | 必须 |
| 1 | 年 | (无) | (无) | 是 |
| 2 | 月 | 0-11 | (无) | 是 |
| 3 | 日 | 1-31 | 1 | 否 |
| 4 | 时 | 0-23 | 0 | 否 |
| 5 | 分 | 0-59 | 0 | 否 |
| 6 | 秒 | 0-59 | 0 | 否 |
| 7 | 毫秒 | 0-999 | 0 | 否 |
//取得开始时间//var start = new Date().getTime();//var start = +new Date();var start = Date.now(); doSomething();//取得停止时间var stop = Date.now(),result = stop - start;| IE9+ | Fire 3+ | Firefox 3+ | Safari3+ | Opera 10.5 | Chrome |



/** 特点* 1.具有局限性,不能定义在if、while、for、try-catch等结构中* 2.可以定义在被引用后(函数声明提前)*/function sum(num1, num2){ return num1+num2;}/** 特点* 1.可以定义在任何位置*/var sum = function(num1, num2){ return num1 + num2;};/** 最后一个参数是函数体,前面的所有参数枚举出新函数的参数* 特点:* 1.存在性能问题,需要解析两次(第一次是解析常规ECMAScript代码;第二次解析传入构造函数的字符串)* 2.执行环境为window* 3.可以看作一种函数表达式*/var sum = new Function(num1, num2){ return num1 + num2;};/*** 对数组对象进行排序的比较函数* @param{string} propertyName 按照哪个属性来排序* @return{function} 比较函数*/function createComparisonFunction(propertyName){ return function(obj1, obj2){ var value1 = obj1[propertyName]; var value2 = obj2[propertyName]; if(value1 < value2){ return -1; }else if(value1 > value2){ reuturn 1; }else{ return 0; } };}var data = [{name:‘Zachary‘, age:28}, {name:‘Nicholas‘, age:29}];data.sort(createComparisonFunction(‘name‘);alert(data[0].name); //Nicholasdata.sort(createComparisonFunction(‘age‘);alert(data[0].name); //Zachary function factorial(num){ if(num <= 1){ return 1; }else{ return num * arguments.callee(num-1); }}function outer(){ inner();}function(){ //严格模式下导致错误 alert(arguments.callee.caller);}outer();function sayName(name){ alert(name);}function sum(num1, num2){ return num1 + num2;}function sayHi(){ alert(‘hi‘);}alert(sayName.length); //1alert(sum.length); //2alert(sayHi.length); //0function sum(num1, num2){ return num1 + num2;}function callSum1(num1, num2){ return sum.apply(this, arguments); //传入arguments对象数组(apply将其当作一个普通数组使用)}function callSum2(num1, num2){ return sum.apply(this, [num1, num2]); //传入arguments对象}alert(callSum1(10, 10)); //20alert(callSum2(10,10)); //20function sum(num1, num2){ return num1 + num2;}function callSum(num1, num2){ return sum.call(this, num1, num2); //传入arguments对象数组(apply将其当作一个普通数组使用)}alert(callSum1(10, )); //20window.color = ‘red‘;var o = {color:‘blue‘};function sayColor(){ alert(this.color);}var objectSayColor = sayColor.bind(o);objectSayColor(); //blue| IE9+ | Firefox4+ | Safari 5.1+ | Opera 12+ | Chrome |
//情况一:基本类型调用相应包装类型的方法时自动封装var s1 = ‘some text‘;var s2 = s1.substring(2);//情况二:Object构造函数根据传入的值得类型返回基本包装类型实例var obj = new Objetc(‘some text‘);alert(obj instanceof String); //true//情况三:转型函数,不同于使用new调用包装类型的构造函数var value = ‘25‘;var number = Number(value); alert(typeof number); //‘number‘var falseObject = new Boolean(false);var falseValue = false;alert(typeof falseObjetc); //‘objetc‘alert(typeof falseValue); //falsevar num = 10.005;alert(num.toFixed(2)); //‘10.01‘alert(num.toExponential(2)); //‘1.00e+1‘alert(num.toPrecision(2)); //‘10‘var stringValue = ‘hello world‘;alert(stringValue.charAt(1)); //‘e‘alert(stringVlaue.charCodeAt(1)); //‘101‘alert(stringVlaue[1]);var stringValue = ‘hello‘;var result = StringValue.concat(‘world‘, ‘!‘);alert(result); //‘hello world!‘alert(stringValue); //‘hello‘//正值var stringValue = ‘hello world‘;alert(stringVlaue.slice(3)); //‘lo world‘alert(stringValue.substring(3)); //‘lo world‘alert(stringValue.substr(3)); //‘lo world‘//负值alert(stringVlaue.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.indexOf(‘o‘, 6)); //7alert(stringValue.lastIndexOf(‘0‘, 6)); //4var stringValue = ‘ hello world ‘;var trimmedStringVakue = stringValue.trim();alert(stringValue); //‘ hello world ‘alert(trimmedStringValue); //‘hello world‘| IE9+ | Firefox3.5+ | Safari5+ | Opera10.5+ | Chrome |
| Firefox3.5+ | Safari5+ | Chrome8+ |
var text = ‘cat, bat, sat, fat‘;var pattern =/.at/;//与pattern.exec(text)相同var matches = text.match(pattern);alert(matches.index); //0alert(matches[0]); //‘cat‘alert(pattern.lastIndex); //0var text = ‘cat, bat, sat, fat‘;var pos = text.search(/at/);alert(pos); //1 var text = ‘cat, bat, satm 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‘
var text = ‘cat, bat ,sat, fat‘;result = text.replace(/(.at)/g, ‘word{$1}‘);alert(result); //word(cat), word(bat) ,word(sat), word(fat)function htmlEscape(text){ return text.replace(/[<>"&]/g, function(match, pos, originalText){ switch(match){ case ‘<‘: return ‘$lt;‘; case ‘>‘: return ‘>‘; case ‘&‘: return ‘&‘; case ‘\"‘: return ‘"‘; } });}alert(htmlEscape(‘<p class="greeting">Hello world!</p>‘)); //<p class=$quot;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(/[^\,] +/); //["", ",", ",", ",", ""]var stringValue = ‘‘yellow;alert(stringValue.localeCompare(‘brick‘)); //1alert(stringValue.localeCompare(‘yellow‘)); //0alert(stringValue.localeCompare(‘zoo‘));alert(String.fromCharCode(104, 101, 108, 111)); //‘hello‘var uri = ‘http://www.wrox.com/illegal value.htm#start ‘;//‘http://www.wrox.com/illegal%20value.htm#start‘alert(encodeURI(uri));//‘http%3A%2F%2Fillegal%20value.htm%23start‘alert(encodeURIComponent(uri));var uri = ‘http%3A%2F%2Fillegal%20value.htm%23start‘;//http%3A%2F%2Fillegal%20value.htm%23startalert(decodeURI(uri));//http://www.wrox.com/illegal value.htm#startalert(decodeURIComponent(uri));var msg = ‘hello world‘;eval(‘alert(msg);‘); //‘hello world‘
//没有给函数明确指定this值得情况下,无论是通过将函数添加为对象的方法//还是调用call()或apply(),this值等于Global对象var global = function(){ return this;}();
//参数中的最大值var max = Math.max(3, 54, 32, 16);alert(max); //54var min = Math.min(3, 54, 32, 16);alert(min); //3//数组中的最大值var values = [1, 2, 3, 4, 5, 6];max = Math.max.apply(Math, values);function selectFrom(lowerValue, upperValue){ var choices = upperValue - lowerValue + 1; return Math.floor(Math.random() * choices + lowerValue);}var num = selectFrom(2,10);alert(sum); //介于2和10之间(包含)的一个数
JavaScript高级程序设计(第三版) (5章 引用类型)
原文:http://www.cnblogs.com/eli01/p/3980593.html