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]

文章标签:
目前有5条评论
Comment
Trackback
Loading ....
  • LAONB 回应于2010/02/23 16:11 回复TA

    过来问问春节回家爽到什么程度 :grin:

  • simaopig 回应于2010/02/23 17:28 回复TA

    @LAONB
    被老人骂了好半天,一年一分钱没攒下。不过回家的感觉,那真是倍儿好。呵。

  • LAONB 回应于2010/02/23 20:50 回复TA

    @simaopig
    老人一年没见着你,肯定有很多话要教导。
    今年制定个计划就好了,呵呵。

  • 淘宝网首页登陆 回应于2010/02/24 17:37 回复TA

    看了您的博客,非常想和您做个友情链接,不知道行不行。

  • simaopig 回应于2010/02/24 17:39 回复TA

    @淘宝网首页登陆
    非常不好意思,贵站的内容与我站严重不符,无法做“有情”链接。

  • 本篇文章没有Trackback
你目前的身份是游客,请输入昵称和电邮!
输入内容...