/* 数组和对象 【JavaScript 权威指南 第五版】 */ 对象: 是一个无序属性集合,每个属性都有自己的名字和值 创建对象简单方法,对象直接量 */ var obj = {}; var obj = {name: 'maxthon'}; {name: {},text: []}; 可使用 new 操作符 var a = new Array(); var d = Date(); var r = new RegExp('javascript','i'); var o = new Object(); // var o = {}; /* 注: new 操作符后跟构造函数,所以 typeof Array; // 'function' typeof Object; // 'function' Object 是 Function 的实例. Function 是特殊的对象,也是 Object 的实例. 对象属性 使用 . 符合来存取属性的值. // 注:同时可使用 [],里面使用属性名(可使用变量,这点特别有用). var t = {}; t.text = 'hello'; t.o = {}; t.o.name = 'rd'; t.n = []; { "text": "hello" }; console.log(t.text); 'hello'; 补充: 通常使用关键字 var 来声明变量,但是声明对象属性时,不能使用 var 声明 对象枚举 var F = function () {}; F.prototype.name = 'RD'; var obj = F; for (var key in obj) { console.log(key); name; } 仅枚举对象自身,不沿原型链向上查 obj) { if (obj.hasOwnProperty(key)) { console.log(key); // } } 注: for in 不能枚举出预定义属性; toString. */ 检查属性存在性 */ window.a = 'rd'; console.log(a in window); true; F; console.log('name' in obj); true; var toString = Object.prototype.toString; 如果对象 obj,含有方法 getName,则执行它; if (obj.getName && toString.call(obj.getName) === '[object Function]') ) { obj.getName(); } 补充: console.log(null == undefined); true; console.log(null !== undefined); 删除属性 delete obj.name; 补充: 使用 delete 操作符,不能删除使用 var 声明的变量; 作为关联数组的对象 取对象属性: obj.name; obj['name']; 这里 name 为字符串. 使用 [] 表示时,属性名是用字符串来表示的. 那么可 在运行过程中进行添加等操作 注:当此属性是做为变量传递时,特别有用. 又称 关联数组 映射: JavaScript 对象把字符串(属性名) 映射成值. key 属性名,此处 做为值存在. } 通用的 Object 属性和方法 JavaScript 中所有对象都继承自 Object 类; 1,constructor 属性. 指向其构造函数. () {}; var f = F; console.log(f.constructor == F); true 构造函数的原型存在属性 constructor 指向自己; F.prototype.constructor == F; 补充: var G = () {}; G.prototype = var g = G; console.log(g.constructor == F); true; console.log(g.constructor == G); false; 可使用 g instanceof F; 2,toString() 方法 {'name': 'maxthon'}.toString(); '[object Object]' 数组使用 toString 方法,把会元素组成字符串,其它对象会转化为 [object Object]; 函数使用原始 toString 方法,会得到函数源码 ['a','b',1,false,['e','f'],{}].toString(); "a,b,false,e,f,[object Object]" t() { console.log('test'); } t.toString(); 源码 3,toLocalString(); 返回对象的一个本地化字符串 4,valueOf(); 在转化为基本类型时,会使用到. valueOf/toString. 5,hasOwnProperty(); 6,propertyIsEnumberable(); 是否可枚举出来; 7,isPrototyeOf(); a.isPrototyeOf(b); 如果 a 是 b 的原型,则返回 true; var o = {}; new Object; Object.prototype.isPrototyeOf(o); true; Object.isPrototyeOf(o); false; o.isPrototyeOf(Object.prototype); false; Function.prototype.isPrototyeOf(Object); 【闭包是存在函数实例,垃圾没有回收是存在赋值引用】 */ 数组: 有序的、值的集合; 每个值,也叫元素,对应一个下标; 下标是从 0 开始; 数组中值,可以为任何类型. 数组,对象,null,undefined. 创建. var arr = []; var arr = Array(); var t = ''var arr = [1,2,3,1)">null,undefined,[],{},t]; 使用 new 操作符创建数组的3种情况: new Array(); [],和直接量相同 new Array(5); 长度为 5; []直接量是无法做到的. console.log(arr); []; JavaScript 引擎会无视 undefined; new Array('5'); 值为 ['5']; new Array('test'); 值为 ['test']; 相关实例 var s = [1,3]; s[5] = 'a'; console.log(s); [1,'a'] 数组的读和写 value = array[0]; a[1] = 3.14; i = 2; a[i] = 3; a[a[i]] = a[0]; 数组 -> 对象 -> 属性 array.test = 'rd'; 数组下标大于等于 0,并且小于 2的32次方 减 1 的整数. 其它值,JavaScript 会转化成字符串,做为对象属性的名字,不再是下标. var array = []; array[9] = 10; array 长度会变成 10; 注: JavaScript 解释器只给数组下标为 9 的元素分配内存,其它下标无. []; array.length = 10; 添加 array 的长度; array[array.length] = 4; 删除数组元素 delete 运算符把一个数组元素设置为 undefined 值,但是元素本身还是存在的. 真正删除,可以使用: Array.shift();【删除第一个】 Array.pop();【删除最后一个】 Array.splice();【从一个数组中删除一个连续范围】 或修正 Array.length 长度; var a = [1,1)">]; delete a[1]; console.log(a); [1,3]; 补充: JavaScript 权威指南 第五版 59页 由 var 声明的变量是永久性的,也就是说,用 delete 运算符来删除这些变量将会引发错误. 但: 在开发者工具里面,是可以删除的. 而在网页中,正如书上所写. 数组长度 [].length; 遍历数组 var array = [1,4,5var i = 0,l = array.length; i < l; i++) { console.log(array[i]); } array.forEach( (item,index,arr) { console.log(item); }); 截取或增长数组: 修正 length 长度,前面已提过 多维数组 [[1],[2]] 数组方法 join var str = array.join(); 1,5 var str = array.join('-'); 1-2-3-4-5 注: 此方法与 String.split() 方法相反; reverse(); ]; array.reverse(); [5,1] 注:修改原数组; sort(); ]; array.sort(); 注: 数组中存在未定义元素,把这些元素放到最后 同时可自定义排序,sort(func); func 接收两个参数,如果第一个参数应该位于第二个参数之前,那么比较函数将返回一个小于0的数,相反,返回大于0的数. 相等,返回0; array.sort( (a,b) { return b - a; }); 实例: 按奇数到偶数,并且从小到大排序 [1,6,7,1].sort(if (a % 2 && b % 2) { return a - b; } if (a % 2return -1; } if (b % 2return 1; } b; }); concat() 方法. 合并数组,但不深度合并 ]; a.concat(4,5); slice() 方法. 源数组不改变. ]; a.slice(0,3); [4,5]; a.slice(1,-1); [2,4] a.slice(1,-1 + 5) a.slice(1,4); a.slice(-3,-2); [3] a.slice(-3 + 5,-2 + 5); a.slice(2,1)"> 注: 不包括第二个参数指定的元素. 负值转化为: 负值 + 数组长度 splice(pos[,len[,a,b]]) 方法. 删除指定位置开始后,指定长度元素,再缀加元素; 返回删除元素组成的数组. 原数组改变. ]; a.splice(4); a.splice(1,1); [4]; 此时 a: [1]; ]; a.splice(2,'a','b'); ['a','b']; 此时 a: [1,5] 注: 第二个参数后的参数,直接插入到处理数组中。 第一个参数可为负数. push() 方法和pop() 方法. push() 可以将一个或多个新元素附加到数组的尾部,然后返回数组新长度; pop() 删除数组中的最后一个元素,减少数组的长度,返回它删除的值. 注:两个方法都在原数组上修改,而非生成一个修改过的数组副本. var stack = []; stack.push(1,2); stack: [1,2]; return 2; stack.pop(); stack: [1]; return 2; 删除的元素值 stack.push(3); stack: [1]; return 3; 删除的元素值 stack.push([4,[4,5]]returm 2; stack.pop(); stack: [1]; return [4,5]; 删除的元素值 unshift() 方法和 shift() 方法. 同上,从数组头开始. toString() 方法和 toLocalString() [1,4].toString(); 'a,c'; 和无参数的 join 方法相同. jsapi 新添方法:map,every,some,filter,forEach,indexOf,lastIndexOf,isArray 类似数组的对象 arguments document.getElementsByTagName();
或http://www.cnblogs.com/simayixin/archive/2011/05/09/2040953.html