9.Jav运算符JavaScript中的运算符

运算符是处理数据的基本方法,用来从现有的数据得到新的数据,JavaScript与其他的编程语言一样,提供了多种运算符。

1.加法运算符

‘+’运算符在JavaScript中有两种运算,既可以处理算术的加法,可以用于字符串的连接,他们都写成+。

// 加法
1 + 1 // 2
true + true // 2
1 + true // 2

// 字符串连接
'1' + '1' // "11"
'1.1' + '1.1' // "1.11.1"

下面的写法可以将一个值改为字符串:

x + ''

加法运算符会将其他类型的值,自动转化为字符串,然后再执行连接运算。

[1, 2] + [3]
// "1,23"

// 等同于
String([1, 2]) + String([3])
// '1,2' + '3'

2.算术运算符

JavaScript中提供了9个算术运算符,用来完成基本的算术运算。

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

3.自增和自减

自增和自减运算符,是一元运算符,只需要一个运算子。它们的作用是将运算子首先转为数值,然后加上1或者减去1。它们会修改原始变量。

var x = 1;
++x // 2
x // 2

--x // 1
x // 1

4.字符串的比较

字符串按照字典的数据进行比较。

'cat' > 'dog' // false
'cat' > 'catalog' // false

5.JavaScript中,提供两个相等的运算符:=

简单的来说,他们的区别就是比较两个值是否相等,=比较值相等的时候还需要类型相等。

1.不同类型的值

1 === "1" // false
true === "true" // false

2.同一类型的原始类型值

1 === 0x1 // true
NaN === NaN  // false
+0 === -0 // true

3.同一类型的复合类型值

{} === {} // false
[] === [] // false
(function (){} === function (){}) // false

上面代码分别比较两个空对象、两个空数组、两个空函数,结果都是不相等。原因是对于复合类型的值,严格相等运算比较的是,它们是否引用同一个内存地址,而运算符两边的空对象、空数组、空函数的值,都存放在不同的内存地址,结果当然是false。
如果两个变量引用同一个对象,则它们相等。

var v1 = {};
var v2 = v1;
v1 === v2 // true

注意,对于两个对象的比较,严格相等运算符比较的是地址,而大于或小于运算符比较的是值。

new Date() > new Date() // false
new Date() < new Date() // false
new Date() === new Date() // false

上面的三个表达式,前两个比较的是值,最后一个比较的是地址,所以都返回false。

6.undefined 和 null

undefined和null与自身严格相等。

undefined === undefined // true
null === null // true

由于变量声明后默认值是undefined,因此两个只声明未赋值的变量是相等的。

var v1;
var v2;
v1 === v2 // true

7.相等运算符,如下

1 == true // true
// 等同于 1 === 1

0 == false // true
// 等同于 0 === 0

2 == true // false
// 等同于 2 === 1

2 == false // false
// 等同于 2 === 0

'true' == true // false
// 等同于 Number('true') === Number(true)
// 等同于 NaN === 1

'' == 0 // true
// 等同于 Number('') === 0
// 等同于 0 === 0

'' == false  // true
// 等同于 Number('') === Number(false)
// 等同于 0 === 0

'1' == true  // true
// 等同于 Number('1') === Number(true)
// 等同于 1 === 1

'\n  123  \t' == 123 // true
// 因为字符串转为数字时,省略前置和后置的空格

8.三元运算符

三元条件运算符用问号(?)和冒号(:),分隔三个表达式。如果第一个表达式的布尔值为true,则返回第二个表达式的值,否则返回第三个表达式的值。

't' ? 'hello' : 'world' // "hello"
0 ? 'hello' : 'world' // "world"