javascript权威指南学习笔记(四)
来源:互联网 发布:基于java博客 编辑:程序博客网 时间:2024/04/30 13:13
- 对象创建表达式:
以前以为创建对象都是要带括号,比如:
var date=new Date();var obj=new Object();
今天才发现,其实如果不需要参数给构造函数的话,是可以省略括号的
var date=new Date;var obj=new Object;
2、 相等和不相等运算符
这几年在编程过程中,判断对于或者不对于一般用==、!=;像===、!==基本上没怎么用。
判断也是在原始类型中比较多,判断是否是某个字符串、某个值啊
if (typeof(opts.focusFun) == "function") { } if ($("#phoneAwake").attr("checked") == "checked") {}
var User=function(){ this.name="张三";}console.log(user1=="张三");//输出false
这个输出false是比较容易理解的
var User=function(){ this.name="张三";}User.prototype.toString=function(){ return this.name;}console.log(user1=="张三");//输出true
var User=function(){ this.name="张三";}User.prototype.valueOf=function(){ return this.name;}console.log(user1=="张三");//输出true
如果一个值是对象,另外一个值是数字或者字符串是,对象会通过toString()或valueOf()方法转为原始值,然后再进行比较。
突发奇想 ,那如果是2个对象比较呢?是不是都转换成原始值进行比较呢
var User=function(){ this.name="张三";}User.prototype.toString=function(){ return this.name;} var user=new User();var user1=new User(); console.log(user1==user)//falseconsole.log(user1===user)//false
也是醉了,并没有获得我想要的结果,让我想起java里面用set时、会调用对象的equals方法来比较俩个对象是否一样,来保证set集合的唯一性。
自己也试着写了个equals方法:
var User=function(){ this.name="张三";}var user1=new User();var user2=new User();Object.prototype.equals=function(otherObj){ var objOne=this; //如果 objOne和otherObj 是指向同一内存对象 则相等 if(objOne===otherObj){ return true; } //比较的2个对象必须是Object if(!(objOne instanceof Object)||!(otherObj instanceof Object)){ return false; } //判断2个对象的构造函数是否相同 if(objOne.constructor!=otherObj.constructor){ return false; } //判断2个对象的属性是否相等 for(var prop in objOne){ if(objOne.hasOwnProperty(prop)){ //在objOne 里的属性是否在otherObj中存在 如果不一致 则不相等 if(!otherObj.hasOwnProperty(prop)){ return false; } //如果是原始值类型 应该严格相等 如果不一致则不相等 if(objOne[prop]===otherObj[prop]){ continue; } //如果代码执行到这表示continue 没有起效 则表示参数要么不是原始值类型 要么就是object //如果是object 则需要通过对象方式再校验 如果是原始值类型 则表示对象的属性不一致 if(typeof objOne[prop]!="object"){ return false; } //如果不是原始值类型 那一定是object类型 if(!objOne[prop].equals(otherObj[prop])){ return false; } } } //如果otherProp含有相应的属性 而 objOne 没有则也不相等 for(var otherProp in otherObj){ if(otherObj.hasOwnProperty(otherProp)&&!objOne.hasOwnProperty(otherProp)){ return false; } } return true;}console.log(user1.equals(user2));
0 0
- javascript权威指南学习笔记(四)
- 《Javascript权威指南》学习笔记之四流程控制
- 《Javascript权威指南》学习笔记之四流程控制
- javascript权威指南学习笔记
- javascript权威指南学习笔记
- ###JavaScript权威指南学习笔记:
- javaScript权威指南学习笔记
- 《HTTP权威指南》学习笔记(四)
- javascript权威指南第一部分学习笔记
- Javascript权威指南学习笔记(一)
- javascript权威指南第六版 学习笔记
- Javascript权威指南学习笔记--Jquery类库
- 《JavaScript权威指南》学习笔记一
- 《JavaScript权威指南》学习笔记一
- javascript权威指南学习笔记(一)
- javascript权威指南学习笔记(二)
- javascript权威指南学习笔记(三)
- javascript权威指南学习笔记-对象(七)
- 应用Spring的注解方式实现AOP
- linux下的基本命令
- Linux网络管理
- jeecg心得
- BeanPostProcessors使用总结
- javascript权威指南学习笔记(四)
- 《疯狂Java讲义》第3章——数据类型和运算符
- JAVA日志框架
- Java动态代理的两种实现方法
- HTML笔记(一)
- Condition使用总结
- wamp You don't have permission to access / on this server等问题的解决.
- BaseAdapter和SimpleAdapter的区别
- Delphi 模式窗体返回值ModalResult的使用方法及注意事项