JavaScript 运算符

本文不讨论1+1为何等于2,也不介绍JavaScript中加减乘除中大家都知道的事。要说,咱就说点特别的。就着Zakas大叔给咱出的题http://www.nczonline.net/blog/2010/02/18/my-javascript-quiz-answers/,首先咱来看一下,运算符的优先级。

JavaScript 运算符优先级

JavaScript 运算符优先级,优先级由高到低,相同优先级按照从左到右执行
运算符 描述
. [] () 属性访问、数组下标、函数调用以及表达式分组
++ — – ~ ! delete new typeof void 一元运算符、返回数据类型、对象创建、未定义值
* / % 乘法、除法、取模(乘除优先于加减是肯定的了)
+ – + 加法、减法、字符串连接
<< >> >>> 移位(这个用到的时候太少太少)
< <= > >= instanceof 小于、小于等于、大于、大于等于、instanceof
== != === !== 等于、不等于、全等于、非全等号
& 按位与(这个曾经用过)
^ 按位异或(大学时用过,不过不是js)
| 按位或
&& 逻辑与(And)
|| 逻辑或(Or)
?: 三目运算符,可翻译为,如果则,否则
= oP= 赋值、运算赋值(很无奈,第二个我没用过)
, 逗号运算符,可在一条语句中,执行多个运算,最常用于变量声明中

当数字遇到字符串

在JavaScript中,当数字遇上字符串,到底会发生什么呢?

使用加性运算符(+)时,如果某个运算数是字符串,采用下列规则:

  1. 如果两个运算数都是字符串,那么加性运算符(+)的意义是连接符,将第二个字符串连接到第一个字符串上
  2. 如果只有一个运算数是字符串,把另一个运算数转换成字符串,结果是两个字符串连接成的字符串

[cc lang='javascript']

[/cc]

当使用关系运算符时(<、>、<=、>=),采用下列规则:

  1. 无论何时比较一个数字和一个字符串,ECMAScript 都会把字符串转换成数字,然后按照数字顺序比较它们
  2. 当对一个数字和一个字符串使用关系运算符时,如果字符串不能被转换为有意义的数字,则被转换为NaN ,因任何包含NaN的关系运算都要返回false,其结果返回false

简单试题分析

[cc lang="javascript"]
//根据优先级的规则我们知道,++要比+优先级高
var num1 = 5,
num2 = 10,
result = num1+++num2;

//所以其最终result的结果为 num1++ + num2
alert(num1); //6
alert(num2); //10
alert(result); //15
[/cc]

[cc lang="javascript"]
//根据数字与字符串的规则,不难得到下面的结果
var num1 = “10″,
num2 = “9″;
alert(num1 < num2); //按字符串顺序去比,返回true
alert(+num1 < num2); //加减运算符优先级比关系运算符优先级高,
//先执行+,所以会把num2给转为数字,10 > 9 所以其结果为false
alert(num1 + num2);//二者都是字符串,执行连接运算功能,结果为109
alert(+num1 + num2);//有一个是字符串,有一个是数字,但是仍然执行连接功能,结果为109
[/cc]

JavaScript 运算符》上有5条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>