表达式和运算符

来自专栏前端博客

运算符

JavaScript中运算符主要用于连接简单表达式,组成一个复杂的表达式。常见的有算数表达式、比较表达式、逻辑表达式、赋值表达式等,也有单目运算符,指操作原始表达式。大多数运算符都由标点符号组成(+、>=、!),也有关键字表示的运算符,如typeof、delete、instanceof等。

一些运算符可以作用于任何数据类型(typeof),但大部分操作符希望操作数是特定的类型,而且大部分操作符会计算出(我们也常说返回)一个特定类型的值(typeof返回的全是string)。在JavaScript中运算符通常会根据需要对操作数进行类型转换,乘法操作符希望操作数是数字,但是 "3" * "5"也是合法的,JavaScript会自动将其转换为数字计算,返回Number 15。

有些操作符对不同的数据类型有不同的含义,比如 +

在两个操作数都是数字的时候,会做加法运算两个参数都是字元串或在有一个参数是字元串的情况下会把另外一个参数转换为字元串做字元串拼接在参数有对象的情况下会调用其valueOf或toString在只有一个字元串参数的时候会尝试将其转换为数字在只有一个数字参数的时候返回其正数值console.log(2+4);//6console.log("2"+"4");//"24"console.log(2+"4");//"24"console.log(2+new Date());//"2Mon Jan 20 2014 17:15:01 GMT+0800 (China Standard Time)"console.log(+"4");//4

运算符类型

算数运算符

加法运算符(Addition):x + y减法运算符(Subtraction): x - y乘法运算符(Multiplication): x * y除法运算符(Division):x / y余数运算符(Remainder):x % y自增运算符(Increment):++x 或者 x++自减运算符(Decrement):--x 或者 x--求负运算符(Negate):-x数值运算符(Convert to number): +x

赋值运算符

比较运算符

比较运算符比较它的操作数并返回一个基于表达式是否为真的逻辑值。操作数可以是数字,字元串,逻辑,对象值。字元串比较是基于标准的字典顺序,使用Unicode值。在多数情况下,如果两个操作数不是相同的类型, JavaScript 会尝试转换它们为恰当的类型来比较。这种行为通常发生在数字作为操作数的比较。类型转换的例外是使用 === 和 !== 操作符,它们会执行严格的相等和不相等比较。这些运算符不会在检查相等之前转换操作数的类型

==和===的区别

==和===的区别

逻辑运算符

逻辑运算符常用于布尔(逻辑)值之间; 当操作数都是布尔值时,返回值也是布尔值。 不过实际上&&和||返回的是一个特定的操作数的值,所以当它用于非布尔值的时候,返回值就可能是非布尔值。 逻辑运算符的描述如下

布尔运算符

! 取反运算符&& 且运算符|| 或运算符condition? true case : false case 三元条件运算符

位运算符

或运算(or):符号为|,表示两个二进位位中有一个为1,则结果为1,否则为0。与运算(and):符号为&,表示两个二进位位都为1,则结果为1,否则为0。否运算(not):符号为~,表示将一个二进位位变成相反值。异或运算(xor):符号为?,表示两个二进位位中有且仅有一个为1时,结果为1,否则为0。左移运算(left shift):符号为<<右移运算(right shift):符号为>>带符号位的右移运算(zero filled right shift):符号为>>>

其它

小括弧

在JavaScript中,圆括弧是一种运算符,它有两种用法:如果把表达式放在圆括弧之中,作用是求值;如果跟在函数的后面,作用是调用函数。把表达式放在圆括弧之中,将返回表达式的值。

void

void运算符的作用是执行一个表达式,然后返回undefined。

逗号运算符

逗号运算符用于对两个表达式求值,并返回后一个表达式的值。

运算符优先顺序与结合性

运算符优先顺序与结合性

类型转换

if的判断

// 题目1:如下代码输出什么?if ("hello") { console.log("hello")}// 题目2:如下代码输出什么?if ("") { console.log(empty)}// 题目3:如下代码输出什么?if (" ") { console.log(blank)}


// 题目4:如下代码输出什么?if ([0]) { console.log(array)}if(0.00){ console.log(0.00)}


一句话:对于括弧里的表达式,会被强制转换为布尔类型

== 的判断

"" == 0 //题目1" " == 0 //题目2"" == true //题目3"" == false //题目4" " == true //题目5


!" " == true //题目6!" " == false //题目7"hello" == true //题目8"hello" == false //题目9"0" == true //题目10"0" == false //题目11"00" == false //题目12"0.00" == false //题目13


undefined == null //题目14{} == true //题目15[] == true //题目16var obj = { a: 0, valueOf: function(){return 1} } obj == "[object Object]" //题目17obj == 1 //题目18obj == true //题目19


instanceof

如果所判别的对象确实是所指定的类型,则返回true。 其语法如下:

objectName instanceof objectType

objectName 是需要做判别的对象的名称

objectType是假定的对象的类型, 例如Date或 Array.

当你需要确认一个对象在运行时的类型时,可使用instanceof. 例如,需要 catch 异常时,你可以针对抛出异常的类型,来做不同的异常处理。

例如, 下面的代码使用instanceof去判断 theDay是否是一个 Date 对象. 因为theDay是一个Date对象, 所以if中的代码会执行.

var theDay = new Date(1995, 12, 17);if (theDay instanceof Date) { // statements to execute}

参考

表达式和运算符

比较操作符

运算符优先顺序

Generator推导式表达式和运算符表达式和运算符


推荐阅读:
查看原文 >>
相关文章