js中操作符 || 和 &&

一、第一部分(引子)

先来介绍一下在js中由其他数据类型转化为boolean时到底是转化成true还是false

js中,当以下值转成boolean类型的时候,会被转换成false

0

""(空串)

false

undefined

null

NaN

其余的则会被转化为true

这里顺便说一句,js中将数据转化为boolean类型的方式有

1.Boolean()

2.!!

//eg
var value = 5;

console.log(typeof value);//number

console.log(typeof Boolean(value));//boolean

console.log(typeof !!value);//boolean

二、第二部分(规则说明)

好了,下面言归正传,下面来介绍几条规则:

1.

a || b

当!!a为true时,返回值为a;当!!a为false时,返回值为b

2.

a && b

当!!a为true时,返回值为b;当!!a为false时,返回值为a

3.

&& 优先级高于 ||

4.

有多个&&,从左到右两两执行;||同理

//eg

console.log(true || 0);//true

console.log(0 || 1);//1

console.log(null || undefined);//undefined

console.log(undefined || null);//null

console.log(null && "rgy");//null

console.log(undefined && "rgy");//undefined

console.log(1 || 2 || 4);//1

console.log(1 && 2 && 4);//4

console.log(1 && 0 && 4);//0

console.log((1 && 3 || 0)) && 4);//4

console.log(1 && (3 || 0 && 4));//3

console.log(1 && 3 || 0 && 4);//3

console.log(0 && 4 || 1 && 3);//3

三、第三部分(应用)

1.

callback && callback();

这个想必大伙不陌生吧,如果callback存在,则执行callback(),它等价于

if(callback){

callback();

}

2.

this.count = this.count || 0;

这个在实现简单的讲数器的时候比较常用

3.

var obj = obj || {};

一般用于传参的obj,做个初始化

4.

引用http://www.jb51.net/article/21339.htm中的一个例子

成长速度为5显示1个箭头;

成长速度为10显示2个箭头;

成长速度为12显示3个箭头;

成长速度为15显示4个箭头;

其他都显示都显示0各箭头。

要求:根据成长速度的值显示箭头数

最通用也是最容易想到的方式无非是 if else 语句,或者是 switch case 语句

这当然是可以的,不过在js中却有更为简洁的方法:

1).
var add_step = 12;
var add_level =
(add_step == 5 && 1) ||
(add_step == 10 && 2) ||
(add_step == 12 && 3) ||
(add_step == 15 && 4) || 0;
console.log(add_level);

2).
var add_step = 120;
var add_level = {'5':1,'10':2,'12':3,'15':4}[add_step] || 0;
console.log(add_level);

当然&&与||的应用还有很多,远远不限于上面所列的这些,事实上,js中&&与||十分强大

但是需要注意的一点就是:js中||和&&的特性帮我们精简了代码的同时,

也带来了代码可读性的降低。这个和正则表达式是一个道理,能够精简代码,

但是可读性会降低,建议使用这样的方式的时候注意写上必要的注释

四、第四部分(逗号操作符)

既然说到了操作符,这里顺便说一下js中的逗号操作符

定义:

逗号运算符,它将先计算左边的参数,再计算右边的参数值,然后返回最右边参数的值。

先来2个case体会一下:

1.
var a = 9, b = 19;

function test(){
	return a++, b++, a * b;
}

var c = test();

console.log(a);//10
console.log(b);//20
console.log(c);//200

分析:
表达式 a++, b++, a * b 从左到右开始计算,
a的值变为10,b的值变为20,a * b的值自然就为200了

2.
console.log((1, 0, 3, alert("kkk")));//kkk

tip:

不过逗号操作符在赋值的时候要注意一下:

这样就会报错:
var a = 10;
var b = a++, 20;
console.log(b);
这个应该和“=”的优先级有关

改成这样就行了:
var a = 10;
var b = (a++, 20);
console.log(b);//20
时间: 2024-09-29 10:59:33

js中操作符 || 和 &&的相关文章

js中的new操作符

一.js中new操作符来声明一个对象:例如有如下一个实例function Person(){Person.prototype.fn=function(){console.log(1);}}var p=new Person(); 上例中使用new操作符来声明一个对象实际上是进行了三个动作: 1.var p={}; 2.p._proto_=Person.prototype; 3.Person.call(p); 二.以上的三个操作是在使用new操作符创建对象的时候实际执行的动作. 以上为本人对new操

【js实例】js中的5种基本数据类型和9种操作符

js中的5中基本数据类型 js标识符 第一个字符必须为字母,下划线,或美元符 其他字符可以是字母,下划线,美元符,数字 js标识符区分大小写 标识符不能使关键字和保留字 关键字: break do instanceof typeof case else new var catch finally return void continue for switch while debugger function this with default if throw   delete in try  

js中的操作符

写在前面 js语法 DOM对象(把body,div,p等节点树看成一个对象) BOM对象(把浏览器的地址栏历史记录DOM等装在一个对象) 浏览器是宿主,但js的宿主不限于浏览器,也可以是服务器,如node.js. 运算符: //js中拼接运算符 console.log(2+3); console.log('hello'+''+'world'); console.log(2+3+4+'haha'+5+6);//9haha56,一旦碰到非法数字后,后面的一律理解为“拼接” 例如 var num1=5

js中的new操作符与Object.create()的作用与区别

js中的new操作符与Object.create()的作用与区别 https://blog.csdn.net/mht1829/article/details/76785231 2017年08月06日 19:19:26 阅读数:1058 一.new 操作符 JavaScript 中 new 的机制实际上和面向类的语言完全不同. 在 JavaScript 中,构造函数只是一些使用 new 操作符时被调用的函数.它们并不会属于某个类,也不会实例化一个类.实际上,它们甚至都不能说是一种特殊的函数类型,它

转:彻底理解js中this的指向,不必硬背

转:http://www.cnblogs.com/pssp/p/5216085.html 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然网上大部分的文章都是这样说的,虽然在很多情况下那样去理解不会出什么问题,但是实际上那样理解是不准确的,所以在你理解this的时候会有种琢磨不透的感觉),那么接下来我会深入的探讨这个问题. 为什么要学习this?

JS中函数的 this 各种指向

this是js的一个关键字,随着函数使用场合不同,this的值会发生变化.但是总有一个原则,那就是this指的是调用函数的那个对象. 情形1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window. 情形2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象. 情形3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,

【JavaScript】关于JS中的constructor与prototype

最初对js中 object.constructor 的认识: 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下: 我们都知道,在JS中有一个function的东西.一般人们叫它函数.比如下面的代码 function Person(name)   {     alert(name);   }   Person('js');//js 上面的代码中,Person的表现的确跟一般的函数没有什么区别,接着看下面的代码

JS中简单的this学习

我在学习JS初期,在使用this的时候经常出现问题,当然就是在现在,也有一些场景不能很好的明白this到底指代的是什么?看下面一个例子: ? 1 2 3 4 5 6 7 8 9 10 var x = 10;    var foo = {        x: 20,        bar: function() {            alert(this.x);        }    }    var bar = foo.bar;    foo.bar();    //20    bar()

JS中 toString() & valueOf()

原文链接: http://www.cnblogs.com/imwtr/p/4392041.html 数据的转换 所有对象继承了两个转换方法: 第一个是toString(),它的作用是返回一个反映这个对象的字符串 第二个是valueOf(),它的作用是返回它相应的原始值 toString() toString()可以看做是把一个数据转换成了相应字符串的形式,安照这个转换规则中 使用样例: //返回相应的字符串 console.log( ({x:1, y:1 }).toString() ); //