`
加菲学Java
  • 浏览: 131200 次
  • 性别: Icon_minigender_1
  • 来自: 扬州
社区版块
存档分类
最新评论

JavaScript逻辑运算符一个有趣的现象

    博客分类:
  • Web
阅读更多

 今天看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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics