标签:des style class blog code java
var person = { name: ‘Frank‘, age: 10 }; for(item in person) { if (person.hasOwnProperty(item)){ alert(person[item]); } }
var born = new Date("July 21, 1983 01:15:00"); document.write(born.toLocaleString());
这段代码会在页面上输出: 7/21/2014 5:15:00 PM
var o = {}; document.writeln(o.constructor); // function Object() { [native code] } var f = function() {}; document.writeln(f.constructor); // function Function() { [native code] } var i = 10; document.writeln(i.constructor); // function Number() { [native code] }
从代码的输出可见,这些对象,包括函数对象自身都是使用函数作为构造函数实现的,所以可以使用new语法创建实例。
var o = {}; document.writeln(Function.prototype.isPrototypeOf(o)); // false document.writeln(Object.prototype.isPrototypeOf(o)); // true var f = function() {}; document.writeln(Function.prototype.isPrototypeOf(f)); // true document.writeln(Object.prototype.isPrototypeOf(f)); // true var i = 10; document.writeln(Function.prototype.isPrototypeOf(i)); // false document.writeln(Object.prototype.isPrototypeOf(i)); // false var io = new Number(10); document.writeln(Function.prototype.isPrototypeOf(io)); // false document.writeln(Object.prototype.isPrototypeOf(io)); // true
从页面的输出可以看出:
var arr = [‘Frank‘, ‘Dong‘]; // 比较神奇的地方 arr[3] = ‘JavaScript‘; for(var i = 0, len = arr.length; i < len; i++) { alert(arr[i]); }
数组通过[]访问,这个最正常不过了,不过JavaScript中实现的显然是动态的数组,不仅可以访问现有的值,还可以动态添加数据。
var arr = [‘Frank‘, ‘Dong‘]; arr.push(‘C#‘, ‘JavaScript‘); alert(arr.pop()); alert(arr.length);
push方法一次可以添加任意数量的元素到集合末尾,修改集合的length值,并返回修改后的集合长度。
var arr = [‘Frank‘, ‘Dong‘]; arr.push(‘C#‘, ‘JavaScript‘); alert(arr.shift()); alert(arr.length);
上面的代码很简洁,但是需要说明的是:
var arr = [‘Frank‘, ‘Dong‘]; arr.unshift(‘C#‘, ‘JavaScript‘); alert(arr.pop()); alert(arr.length);
这里unshift方法同样可以一次添加多个元素。
var arr = [2, 1, 3, 4, 5]; arr.sort(); alert(arr); var arrString = [‘A‘, ‘a‘, ‘B‘, ‘b‘]; arrString.sort(); alert(arrString);
如果要实现自定义的排序方式,需要提供sort的参数,就是自定义排序的方法,看例子:
// 实现升序排列:等同于JavaScript的默认实现 function compareAscendingly(value1,value2){ if(value1 < value2) { return -1; } else if(value1 > value2) { return 1; } else { return 0; } } // 实现降序排列 function compareDescendingly(value1,value2){ if(value1 < value2) { return 1; } else if(value1 > value2) { return -1; } else { return 0; } } var arr = [2, 1, 3, 4, 5]; arr.sort(compareDescendingly); alert(arr); var arrString = [‘A‘, ‘a‘, ‘B‘, ‘b‘]; arrString.sort(compareDescendingly); alert(arrString);
上面的例子实现了数值和字符串的降序排列,当然了对于数值对象,也可以使用更加方便的方式:
// 实现升序排列:等同于JavaScript的默认实现 function compareAscendingly(value1, value2){ return value1 - value2; } // 实现降序排列 function compareDescendingly(value1, value2){ return value2 - value1; } var arr = [2, 1, 3, 4, 5]; arr.sort(compareDescendingly); alert(arr);
对于自定义的对象复杂一点的对象,这里也只需要实现自己的compare逻辑,然后传给sort方法就可以,相当的简单:
function Person(name, age) { this.name = name; this.age = age; // 重写toString方法 this.toString = function() { return name + ‘ ‘ + age; }; } // 实现按照年龄升序排列 function compareAscendingly(p1, p2){ return p1.age - p2.age; } var arr = [new Person(‘Frank‘, 20), new Person(‘Dong‘, 10)]; arr.sort(compareAscendingly); alert(arr);
function Person(name, age) { this.name = name; this.age = age; // 重写toString方法 this.toString = function() { return name + ‘ ‘ + age; }; } var arr = [new Person(‘Frank‘, 20), new Person(‘Dong‘, 10)]; arr.reverse(); alert(arr);
function Person(name, age) { this.name = name; this.age = age; // 重写toString方法 this.toString = function() { return name + ‘ ‘ + age; }; } var arr = [new Person(‘Frank‘, 20), new Person(‘Dong‘, 10)]; alert(arr.toString()); // 等同于:alert(arr);
除了toString方法外,如果想自定义输出的格式(其实主要是自定义分隔符),则可以使用join方法:
var ps = ["Frank","Dong"]; alert(ps.join("-"));
var ps = [‘Frank‘, ‘Dong‘, ‘C#‘, ‘JavaScript‘]; var ps1 = ps.slice(1); var ps2 = ps.slice(1,2); alert(ps1); // Dong,C#,JavaScript alert(ps2); // Dong
var ps1 = [‘Frank‘, ‘Dong‘]; var ps2 = [‘C#‘]; var ps3 = [‘JavaScript‘]; // 连接集合 var ps = ps1.concat(ps2, ps3); alert(ps); // Frank,Dong,C#,JavaScript // 注意ps1本身并没有改变 alert(ps1); // Frank,Dong // 充当添加元素的角色,只不过会创建新的集合 alert(ps1.concat(‘Java‘, ‘C++‘));
arrayObject.splice(index,howmany,item1,.....,itemX) index参数:必需。整数,规定添加/删除项目的位置,使用负数可从集合结尾处规定位置开始操作。 howmany参数:必需。要删除的项目数量。如果设置为 0,则不会删除项目。 item1, ..., itemX参数:可选。向集合添加的新项目。 这个函数的返回值是修改后的数组(如果有的话)。
看一个小例子:
var ps = [‘Frank‘, ‘Dong‘, ‘C#‘, ‘JavaScript‘]; ps.splice(1, 1, ‘DDD‘); alert(ps); // Frank,DDD,C#,JavaScript ps.splice(1, 1); alert(ps); // Frank,C#,JavaScript
var ps = [‘Frank‘, ‘Dong‘]; // 最佳方式: 创新新的空集合,之前的集合如果没有引用在指向它将等待垃圾回收。 // 据有关人员测试,此种方式效率最高。 ps = []; alert(ps); var ps1 = [‘Frank‘, ‘Dong‘]; // 最奇怪的方式:简单粗暴但是有效,很多的类库都在使用 ps1.length = 0; alert(ps); var ps2 = [‘Frank‘, ‘Dong‘]; // 无法评价splice函数了,功能太多了 ps2.splice(0, ps.length); alert(ps);
到此,JavaScript中的集合就总结到此了,简单说了,JavaScript内置对象中Object和Array可以演化成各种常用的集合来完成特定的功能。
JavaScript大杂烩7 - 理解内置集合,布布扣,bubuko.com
标签:des style class blog code java
原文地址:http://www.cnblogs.com/dxy1982/p/3720997.html