项目中需要比较两个对象是否相等,给 Object 对象开展了(别紧张,别说我把它污染了),一个实现而已,象 java 一样可以只给自己想要的类重写 equals 方法。
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
- Object.prototype.equals = function(obj){
- if(this == obj)
- return true;
- if(typeof(obj)=="undefined"||obj==null||typeof(obj)!="object")
- return false;
- var length = 0; var length1=0;
- for(var ele in this) {
- length++;
- }
- for(var ele in obj) {
- length1++;
- }
- if(length!=length1)
- return false;
- if(obj.constructor==this.constructor){
- for(var ele in this){
- if(typeof(this[ele])=="object") {
- if(!this[ele].equals(obj[ele]))
- return false;
- }
- else if(typeof(this[ele])=="function"){
- if(!this[ele].toString().equals(obj[ele].toString()))
- return false;
- }
- else if(this[ele]!=obj[ele])
- return false;
- }
- return true;
- }
- return false;
- };
示例如下:
- var p1 = {
- name: "jack",
- age: 18
- };
- var p2 = {
- name: "lucy",
- age: 10
- };
- var p3 = {
- name: "jack",
- age: 18
- };
- console.log(p1.equals(p2)); //false
- console.log(p1.equals(p3)); //true
- console.log(p1.equals({
- name: "jack",
- age: 18
- })); //true
来源: