今天看JavaScript内核 系列的时候看到一个程序想到的一些东东。
一般的,||运算符都是用来判断两边的结果,最后返回的是true或者false,而在JavaScript中却有一个比较好玩的现象。
alert(1||2); alert(1>2||2>3);
如果不去运行程序,我的想法就是:
true
false
而实际结果呢?
1
false
看到这个结果的时候的确是感觉比较奇怪的,也就是说如果||两边没有任何的比较,那首先返回的结果就是左边的那个。而&&与之相反
//定义一个Address类
function Address(street,xno){ this.street = street || 'Huang Quan Road'; this.xno = xno || 135; this.toString = function(){ return "street : " + this.street + ", No : " + this.xno; } } //定义另一个"类",Person function Person (name, age, addr) { this.name = name || 'unknown'; this.age = age; this.addr = addr || new Address(null, null); this.getName = function () {return this.name;} this.getAge = function(){return this.age;} this.getAddr = function(){return this.addr.toString();} } alert(1||2); // 1 alert(1>2||2>3); //false alert(1|2); //3 alert(1>2|2>3); //0 alert(1&&2); //2 alert(1&2); //0 alert(1>0&&2>1); //true alert(1>0&2>1); //1 //通过new操作符来创建两个对象,注意,这两个对象是相互独立的实体 var jack = new Person('jack', 26, new Address('Qing Hai Road', 123)); var abruzzi = new Person('abruzzi', 26); var per=new Person(); alert(per.name); //unknown alert(per.age); //undefined alert(per.addr); //street : Huang Quan Road, No : 135 var add=new Address('WuXi Gaolang',1600); alert(add); //street : WuXi Gaolang, No : 1600 alert(jack.getName()); //jack alert(jack.getAge()); //26 alert(jack.getAddr()); //street : Qing Hai Road, No : 123 alert(abruzzi.getName()); //abruzzi alert(abruzzi.getAge()); //26 alert(abruzzi.getAddr()); //street : Huang Quan Road, No : 135
个人还不太理解的就是(位移)
alert(1|2); //3 alert(1>2|2>3); //0 alert(1>0&&2>1); //true alert(1>0&2>1); //1