原文出自

作者:小火柴的蓝色理想

 javascript中运算符总共有46个,除了前面已经介绍过的算术运算符、关系运算符、位运算符、逻辑运算符之外,还有很多运算符。本文将介绍条件运算符、逗号运算符、赋值运算符、()和void运算符

条件运算符

  条件运算符是javascript中唯一的一个三元运算符(三个操作数),有时直接称做'三元运算符'。通常这个运算符写成'?:',当然在代码中往往不会这么简写,因为这个运算符拥有三个操作数,第一个操作数在'?'之前,第二个操作数在'?'和':'之间,第三个操作数在':'之后

variable = boolean_expression ? true_value : false_value;

  本质上,这就是基于对boolean_expression求值的结果,决定给变量variable赋什么值。如果求值结果是true,则给变量variable赋值true_value;如果求值结果是false,则给变量variable赋值false_value

  条件运算符的操作数可以是任意类型,第一个操作数当成布尔值,如果它是真值,那么将计算第二个操作数,并返回其计算结果。否则,如果第一个操作数是假值,那么将计算第三个操作数,并返回其计算结果。第二个和第三个操作数总是会计算其中之一,不可能两者同时执行

  其实使用if语句也会带来同样的效果,'?:'运算符只是提供了一种简写形式。这里是一个'?:'的典型应用场景,判断一个变量是否有定义(并拥有一个有意义的真值),如果有定义则使用它,如果无定义则使用一个默认值:

greeting = 'hello ' + (username ? username : 'there');

  这和下面使用if语句的代码是等价的,但显然上面的代码更加简洁:

greeting = 'hello ';
if(username)greeting += username;
elsegreeting += 'there';

  三元条件表达式与if...else语句具有同样表达效果,但是两者具有一个重大差别,if...else是语句,没有返回值;三元条件表达式是表达式,具有返回值。所以,在需要返回值的场合,只能使用三元条件表达式,而不能使用if...else

console.log(true ? 'T' : 'F');

  上面代码中,console.log方法的参数必须是一个表达式,这时就只能使用三元条件表达式

逗号运算符

  逗号运算符是二元运算符,它的操作数可以是任意类型。它首先计算左操作数,然后计算右操作数,最后返回右操作数的值,用逗号运算符可以在一条语句中执行多个运算

i = 0,j = 1,k = 2;
//计算结果是2,它和下面的代码基本等价
i =0; j = 1; k = 2;

  逗号运算符常用于声明多个变量

var iNum1 = 1, iNum = 2, iNum3 = 3;

  逗号运算符最常用的场景是在for循环中,这个for循环通常具有多个循环变量:

//for循环中的第一个逗号是var语句的一部分
//第二个逗号是逗号运算符
//它将两个表达式(i++和j--)放在一条语句中
for(var i=0, j=10;i<j;i++,j--){console.log(i+j);}

  逗号运算符还可以用于赋值,在用于赋值时,逗号运算符总是返回表达式中的最后一项

var num = (1,2,3,4,5);
console.log(num);//5

  [注意]去掉括号会报错

赋值运算符

  简单的赋值操作符由等号'='表示,作用把等号右边的值赋予等号左边的变量或属性

i = o;
o.x = 1;

  '='运算符希望它的左操作数是一个左值:一个变量或者对象属性(或数组元素)。它的右操作数可以是任意类型的任意值。赋值表达式的值就是右操作数的值

  尽管赋值表达式通常非常简单,但有时仍会看到一些复杂表达式包含赋值表达式的情况。例如,可以将赋值和关系操作符放在一个表达式中,就像这样:

(a=b) == 0

  如果这样做的话,应该清楚知道'='和'=='运算符之间的区别。'='具有非常低的优先级,通常在一个较长的表达式中用到了一条赋值语句的值时的时候,需要补充圆括号以保证正确的运算顺序

  赋值操作符的结合性是从右到左,也就是说,如果一个表达式中出现了多个赋值运算符,运算顺序是从右到左。因此,可以通过如下方式来对多个变量赋值:

i = j = k = 0;//把三个变量初始化为0

  JavaScript还提供11个复合的赋值运算符,这些复合的赋值运算符,都是先进行指定运算,然后将得到值返回给左边的变量

  [注意]设计这些操作符的目的是简化赋值操作,使用它们并不会带来任何性能的提升

total += sales_tax;
//等价于
total = total + sales_tax;

运算符      示例        等价于
+=         a+=b       a=a+b
-=         a-=b       a=a-b
*=         a*=b       a=a*b
/=         a/=b       a=a/b
%=         a%=b       a=a%b
<<=        a<<=b      a=a<<b
>>=        a>>=b      a=a>>b
>>>=       a>>>=b     a=a>>>b
&=         a&=b       a=a&b
|=         a|=b       a=a|b
^=         a^=b       a=a^b

  在大多数情况下,表达式为:

a op= b

  这里op代表一个运算符,这个表达式和下面的表达式等价

a = a op b

  在第一行中,表达式a计算了一次,在第二行中,表达式a计算了两次,只有在a包含具有副作用的表达式(比如函数调用和赋值操作)的时候,两者才不等价

data[i++]*=2;
data[i++] = data[i++]*2;

圆括号运算符

  圆括号运算符有两种用法:如果表达式放在圆括号中,作用是求值;如果跟在函数后面,作用是调用函数

  把表达式放在圆括号之中,将返回表达式的值

console.log((1));  //1
console.log(('a')); //'a'
console.log((1+2)); // 3

  把对象放在圆括号之中,则会返回对象的值,即对象本身

var o = {p:1};
console.log((o));// Object {p: 1}

  将函数放在圆括号中,会返回函数本身。如果圆括号紧跟在函数的后面,就表示调用函数,即对函数求值

function f(){return 1;}
console.log((f));// function f(){return 1;}
console.log(f()); // 1

  由于圆括号的作用是求值,如果将语句放在圆括号之中,就会报错,因为语句没有返回值

console.log(var a = 1);// SyntaxError: Unexpected token var
console.log((var a = 1));// SyntaxError: Unexpected token var

void运算符

  void是一元运算符,它出现在操作数之前,操作数可以是任意类型,操作数会照常计算,但忽略计算结果并返回undefined。由于void会忽略操作数的值,因此在操作数具有副作用的时候使用void来让程序更具语义

console.log(void 0); // undefined
console.log(void(0)); // undefined

【作用一】替代undefined

  由于undefined并不是一个关键字,其在IE8-浏览器中会被重写,在高版本函数作用域中也会被重写;所以可以用void 0 来替换undefined

var undefined = 10;
console.log(undefined);//IE8-浏览器下为10,高版本浏览器下为undefined

function t(){var undefined = 10;console.log(undefined);
}
console.log(t());//所有浏览器下都是10

【作用二】客户端URL

  这个运算符最常用在客户端URL——javascript:URL中,在URL中可以写带有副作用的表达式,而void则让浏览器不必显示这个表达式的计算结果。例如,经常在HTML代码中的<a>标签里使用void运算符

<a href="javascript:void window.open();">打开一个新窗口</a>

【作用三】阻止默认事件

  阻止默认事件的方式是给事件置返回值false

//一般写法
<a href="http://example.com" οnclick="f();return false;">文字</a>

  使用void运算符可以取代上面写法

<a href="javascript:void(f())">文字</a>

转载于:https://www.cnblogs.com/socool-hu/p/5670630.html

javascript运算符——条件、逗号、赋值、()和void运算符 (转载)相关推荐

  1. JavaScript的条件判断语句以及三元运算符

    1.简单的if语句 if语句是最简单的常用判断语句 if("条件表达式"){语句块1 }语句快2 2.if-else语句 if-else语句是条件分支语句,如果条件表达式的值为tr ...

  2. 前端战五渣学JavaScript——void 运算符

    最近有点忙,公司有个新项目要尽快上线,所以工作时间很长,没有太多的时间去学习和总结,所以博客也没空更新了.但是充足的工作量让自己觉得很充足,沉淀的知识也有了用武之地,还不错.今天就写写这两天突然想到的 ...

  3. 详解JavaScript运算符(一):赋值、算术、复合运算符

    JavaScript运算符分别为: 赋值运算符.算术运算符.字符串运算符.逻辑运算符.关系运算符.位运算符,其中赋值运算符和算法运算符结合到一起组成复合运算符. 1.赋值运算符 赋值运算符只有一个:即 ...

  4. C语言中的逗号的作用,C语言逗号运算符和逗号表达式基础总结

    逗号运算符的作用: 1,起分隔符的作用: 定义变量用于分隔变量:int a,b 输入或输出时用于分隔输出表列 printf("%d%d",a,b) 2,用于逗号表达式的顺序运算符 ...

  5. c语言逗号的作用情况,C语言逗号运算符和逗号表达式基础总结

    逗号运算符的作用: 1,起分隔符的作用: 定义变量用于分隔变量:int a,b 输入或输出时用于分隔输出表列 printf("%d%d",a,b) 2,用于逗号表达式的顺序运算符 ...

  6. c语言等号 逗号,C语言逗号运算符和逗号表达式

    在C语言中逗号","也是一种运算符,称为逗号运算符. 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式.其一般形式为:表达式1,表达式2 其求值过程是分别求两个表达式的 ...

  7. C++ 笔记(10)— 运算符(算术、关系、逻辑、位运算、赋值和其它运算符)

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号. C++ 内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其它运算符 1. 算术运算符 ...

  8. C语言逗号运算符和逗号表达式基础总结

    逗号运算符的作用: 1,起分隔符的作用: 定义变量用于分隔变量:int a,b 输入或输出时用于分隔输出表列 printf("%d%d",a,b) 2,用于逗号表达式的顺序运算符 ...

  9. JavaScript运算符——一元、二元、三元运算符

    JavaScript 一元运算符 一.js中的一元(一目)运算符 i++ 先赋值,再自加1 i++ 结果为 num1=4 num2=5 document.write()打印 反过来 1> str ...

  10. JS void运算符

    js教程void 是一元运算符,它可以出现在任意类型的操作数之前执行操作数,却忽略操作数的返回值,返回一个 undefined.void 常用语 HTML 脚本中执行 JavaScript 表达式,但 ...

最新文章

  1. javascript this指针详解
  2. 【枚举】【二分答案】【分块答案】【BFS】【最大流】【Dinic】bzoj1189 [HNOI2007]紧急疏散evacuate...
  3. 神经网络侧枝抑制(自编码)
  4. 27.Silverlight二维旋转+平面渐变+动画,模拟雷达扫描图之基本框架
  5. Oracle中通过substr和instr实现截取指定字符之间的字符串:
  6. 图Graph--寻找二度好友(BFS应用)
  7. Sublime Text 3无法安装Package Control插件的解决
  8. Linux内核怎么优化,linux 内核该怎么优化
  9. 关于协程和 ES6 中的 Generator
  10. 在Markdown中更改图像大小
  11. CVPR2017-图像特征匹配-GMS:基于网格的运动统计的快速且极度鲁棒的图像特征匹配算法
  12. msp430项目编程31
  13. 基于SSM实现酒店入住预定管理系统
  14. realme Q2Pro和红米x10哪个好
  15. nacos registry, gateway register failed java.lang.IllegalArgumentException: no server available
  16. windows 组策略
  17. 美光科技面试经验总结(2017-1-6)
  18. 30天敏捷结果(3):用三个故事驱动你的一天
  19. php写入速度rabbit,PHP操作RabbitMQ简单Demo
  20. 《情绪障碍跨诊断治疗的统一方案自助手册》读书摘录

热门文章

  1. docker tomcat 多开 实例_Docker快速验证tomcat单机多实例方案
  2. Uiautomator 2.0之BySelector类学习小记
  3. python微信自动发朋友圈_Python自制微信机器人:群发消息、自动接收好友
  4. db2怎么限定查询条数_查询数据限制显示条数
  5. java查询SQL Server数据库条数
  6. 可编程串口接口芯片8251A
  7. 加域电脑,如何脱域上网下载安装其他工具软件
  8. 基于VPX总线架构下的Virtex-7与C6678信号处理的VPX功能板简介
  9. 电路原理 第一章 电路模型和电路定律(一)
  10. 电离层对高分辨率星载SAR成像的影响1——电离层的相关定义