`
加菲学Java
  • 浏览: 132571 次
  • 性别: 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
分享到:
评论

相关推荐

    狂神说系列 JavaScript笔记

    这份笔记涵盖了JavaScript的基础语法、核心概念以及高级特性,旨在构建一个完整的知识体系,帮助读者从入门到精通。 1. **JavaScript基础** - 变量与数据类型:JavaScript支持动态类型,包括基本类型(如数字、...

    JavaScript快速查询手册

    JavaScript的基础语法包括变量声明(var、let、const),数据类型(Number、String、Boolean、Null、Undefined、Object、Symbol、BigInt),运算符(算术、比较、逻辑、位、三元、赋值、解构赋值),流程控制(条件...

    JavaScript习题.pdf

    8. **逻辑运算符**:逻辑运算符`&&`和`||`用于组合布尔值。`a && b`当a为真时,返回b的值;当a为假时,返回a的值。`a || b`当a为真时,返回a的值;当a为假时,返回b的值。在表达式 `(1===1) || (3)`中,第一个条件为...

    Javascript总结导图

    原型是JavaScript中实现继承的关键机制,每个对象都有一个__proto__属性,指向其构造函数的原型对象。理解原型链对于理解JavaScript的继承至关重要。 3. **作用域与闭包** JavaScript有函数作用域和块级作用域,...

    javascript学习手册

    JavaScript学习手册是一个深入探讨Web开发中重要编程语言——JavaScript的资源。JavaScript,作为WEB标签所指的,是用于创建交互式网页的脚本语言。它通常与HTML和CSS一起使用,构建动态、响应式的用户体验。 ...

    JavaScript标准参考教程(alpha).

    JavaScript是一种广泛应用于网页和网络应用的编程语言,它赋予了网页动态交互的能力,使得用户能够与网站进行实时的互动。JavaScript标准参考教程是阮一峰编写的,这是一本全面介绍JavaScript语言特性和实践的开源...

    Javascript实例教程

    原型是JavaScript实现继承的关键机制,每个对象都有一个`__proto__`属性,指向创建它的构造函数的原型。 八、数组与集合 JavaScript的Array对象用于存储多个值。它提供了多种方法,如push、pop、shift、unshift、...

    JavaScript语法和对象速查手册 .陈冠军.扫描版

    运算符包括算术运算符、关系运算符、逻辑运算符、位运算符等。例如:加法运算符(+)、减法运算符(-)、等号运算符(==)、不等号运算符(!=)、逻辑与(&&)、逻辑或(||)等。这些运算符在JavaScript中有着广泛的...

    JavaScript 深入学习【词法结构值类型和变量】

    8. **运算符**:JavaScript支持各种算术、比较、逻辑和位运算符,理解它们的工作原理对于编写复杂的逻辑至关重要。 9. **控制流语句**:如`if...else`、`switch`、`for`、`while`等,用于决定代码的执行路径。 10....

    javascript基础教程

    3. 运算符:包括算术运算符(+、-、*、/等)、比较运算符(==、===、<、>等)、逻辑运算符(&&、||、!)和赋值运算符(=、+=、-=等)。 4. 控制流:条件语句(if...else、switch)、循环(for、while、do...while)...

    javascript API 中文离线手册(chm版)

    - 运算符:包括算术运算符、比较运算符、逻辑运算符以及赋值运算符等。 - 控制流:涉及条件语句(如if...else)和循环语句(如for、while)。 - 函数:用于封装可重用代码,包括函数声明、函数表达式和箭头函数。...

    突破JavaScript编程实例五十讲

    - 运算符与表达式:涵盖算术运算符、比较运算符、逻辑运算符、赋值运算符等,以及条件表达式和三元运算符的使用。 - 控制流程:介绍if...else语句、switch语句、循环(for、while、do...while)以及break和...

    JavaScript初学者应注意的七个细节详细介绍

    它基于JavaScript的一个子集,因此可以和JavaScript无缝对接。在处理数据存储时,我们可以使用原生的JavaScript方法,比如数组和对象字面量,来存储复杂的数据结构。JSON的引入使得数据的保存、传输和解析变得简单...

    Javascript自执行匿名函数(function() { })()的原理浅析_.docx

    文章中还提到一个非常有趣的发现,即多个运算符的连续使用。例如,可以将多个`~`, `!`, `+`, `-`连续使用,而函数仍然能够正常执行。但是,如果连续出现三个及以上的`+`或`-`,或者连续两个`+`或`-`后跟其他符号(如...

    Javascript-Cheat-Sheet.pdf

    ==、>、<、>=、)、逻辑运算符(&&、||、!)以及赋值运算符(=、+=、-=、*=、/=、%=)等。 5. **函数** - 函数使用`function`关键字声明,如`function sayHello() {console.log("Hello!");}`。 - 可以通过`return...

    javaScript深入大纲

    - **逻辑运算符、逗号运算符**:在特定场景下的用途。 7. **表达式** - 如何正确构建有效的表达式,理解优先级和计算顺序。 8. **循环结构** - **for循环**:基本语法和应用场景。 - **for...of**:遍历可迭代...

    微软JavaScript手册

    3. **原型和原型链**:JavaScript的对象可以通过原型进行扩展,每个对象都有一个proto属性指向它的原型,形成了原型链。通过原型链可以实现继承和共享属性。 4. **函数和闭包**:函数是JavaScript的一等公民,可以...

    JavaScript入门常见问题解决方案简介.docx

    - **使用逻辑运算符赋值:** ```javascript let x = y || defaultX; // 如果 y 为真,则 x=y,否则 x=defaultX ``` #### 九、箭头函数简化 **知识点13:箭头函数简化** - **单行表达式的简洁形式:** ```...

    JavaScript快速查询手册.zip

    ==)和逻辑运算符(&&、||、!)等。 - 控制流:条件语句(if...else、switch)、循环(for、while、do...while)和跳转语句(break、continue)。 2. **函数与作用域** - 函数定义:使用function关键字创建函数,...

Global site tag (gtag.js) - Google Analytics