运算符又称为操作符,运算符就是用于对数据进行各种运算的符号,JavaScript 有算术运算符、赋值运算符、关系运算符等

算数运算符

算数运算符包括 加(+) 减(-) 乘(*) 除(/)和 取模(%) 运算符,对于非Number类型的数据值进行算数运算时,会将这些值转换为Number类型然会在运算,其中任何数据类型的值和 NaN 做运算都得 NaN

  • +可以对两个值进行加法运算,并将结果返回
  • - 可以对两个值进行减法运算,并将结果返回
  • *可以对两个值进行乘法运算,并将结果返回
  • / 可以对两个值进行除法运算,并将结果返回
  • %可以对两个值进行取模运算(取余数),并将结果返回

例:

1
2
3
console.log(100+100); //输出:200
console.log(2-true); //输出:1
console.log(undefined*NaN); //输出:NaN

字符串加法运算

运算关系:

  • 任何数据类型的值与字符串相加时会先将其转换为字符串,然后将两个字符串拼接成一个字符串( 拼串 )
  • 我们可以让任意的数据类型+""( 空串 )使其转换为字符串( 隐式转换 )

例:

1
2
3
4
console.log(123 + "1"); //输出:"1231"
console.log("年龄:" + "20"); //输出:"年龄:20"
console.log(NaN + " 20"); //输出:"NaN 20"
console.log(200 + ""); //输出:"200"
  • 加号还可以用来连接下一行的表达式

例:

1
2
3
4
console.log("锄禾日当午," +
"汗滴禾下土。" +
"谁吃盘中餐," +
"粒粒皆辛苦。"); //输出:"锄禾日当午,汗滴禾下土。谁吃盘中餐,粒粒皆辛苦。"

赋值运算符 ( = )

可以将等号右边的值赋值给等号左边的变量中,但要注意变量一定要先声明,在赋值

语法: 变量名 = 5 * 10;

复合运算:

a+=5 等同于 a = a + 5

a-=5 等同于 a = a - 5

a*=5 等同于 a = a * 5

a/=5 等同于 a = a / 5

a%=5 等同于 a = a % 5

一元运算符

上面的运算符中都有两个操作数,所以它们也叫二元运算符,如果只有一个操作数那它就是一元运算符

+ 号的数即正数,带 - 号的数即负数,正号(+)不会对数字产生任何影响,如果在非Number数据类型的值前加上正号(+)即可将其转换为Number类型( 隐式转换 )

例:

1
2
3
var a = true;
a = +a;
console.log(a); //输出:1

自增与自减运算符

自增运算符( ++ ),自减运算符( – ),自增和自减运算符会使**变量**的值自动 +1 或 -1

自增和自减分为两种,分别是前置自增和后置自增、前置自减和后置自减

语法++变量 or 变量++ / --变量 or 变量--

PS:其中后置自减和后置自增返回的是自增和自减前的值,而前置自减和前置自增返回的是自增和自减后的值

例:

1
2
3
var a = 5
console.log(a, a++, a, ++a, a) //输出:5 5 6 7 7
console.log(a, a--, a, --a, a) //输出:7 7 6 5 5

逻辑运算符

与运算符 ( && )

语法:表达式 && 表达式

  • 运算时会将符号左边的值转换成布尔型再运算
  • 如果符号左边的表达式返回值为true,则结果为符号右边表达式的值,反之,如果符号左边的表达式返回值为false,则结果为符号左边表达式的值

例:

1
2
3
4
var a, b;
a = NaN && 5;
console.log(a); //输出:false
console.log(b = "你好" && ++a); //输出:1

或运算符 ( || )

语法:表达式 || 表达式

  • 运算时会将符号左边的值转换成布尔型再运算

  • 如果符号左边的表达式返回值为false,则结果为符号右边表达式的值,反之,如果符号左边的表达式返回值为true,则结果为符号左边表达式的值

例:

1
2
3
var a = 55-5 || 5;
console.log(a); //输出:50
console.log(b = false || ++a); //输出:51

非运算符 ( ! )

语法:!表达式

  • 对布尔类型数据进行反向运算( 取反 )
  • ! 运算符只有一个操作数,所以属于一元运算符
  • 非布尔类型数据取反会先将其转换为布尔型在运算

例:

1
2
3
4
var a = true;
a = !a;
console.log(a); //输出false
//还可以多次取反 !!a

关系运算符

通过关系运算符可以比较两个值关系,如果关系成立 则返回 true,如果不成立 则返回 false

关系型运算符包括:

  • >(大于)、>=(大于等于)、!>(不大于)

  • <(小于)、<=(小于等于)、!<(不小于)

以上的关系运算符在运算时会将符号左右的操作数转换成数值型再做运算,其中NaN不和任何值相等,包括它本身,所以任何数据类型的值在和NaN做关系运算时都会返回 false

例:

1
2
3
4
5
6
7
8
console.log(1 > true) //输出:false
console.log(true == "1"); //输出:true
console.log(1 >= true) //输出:true
console.log(1 > '0') //输出:true
console.log(10 > null) //输出:true
console.log(10 <= "hello") //输出:false
console.log(1000000000 > NaN) //输出:false
console.log(true > false) //输出:true

PS:null 在做相等运算(==)时不会自动转换为数值型,由于 undefined 衍生自 null,所以这两个值做相等运算时,会返回 true

例:

1
console.log(undefined == null) //输出:true

Js中还有两个关系运算符,分别为:

  • ===(全等)
  • !==(不全等)

全等和不全等运算符在做运算时,不会做自动数据类型转换,如果两个不同数据类型的值做全等(===)运算时,直接返回 false,同样的,如果两个不同数据类型的值做不全等(!==)运算时,直接返回 true

例:

1
2
3
console.log(1 === "1") //输出:false
console.log(1 !== 1) //输出:false
console.log(1 !== "1") //输出:true

isNaN()

通过isNaN()函数可以判断一个值是否为NaN,如果为 NaN则返回值为true,否则为false

例:

1
2
3
4
var a = 'abc'
a = Number(a)
console.log(a, isNaN(a)) //输出:NaN, true
console.log(isNaN(NaN)) //输出:true

条件运算符

条件运算符有3个操作数,所以也称为 三元运算符

语法:条件 ? 表达式1 : 表达式2

  • 如果条件值为 true(非布尔值自动转换) 则执行表达式1,并返回其值,反之亦然.

  • 三元运算符是对if……else语句的一种简化写法

下面的范例中,如果变量 age 中的值小于 18,则向变量 voteable 赋值 “年龄太小”,否则赋值 “年龄已达到”

1
voteable = (age < 18) ? "年龄太小" : "年龄已达到";

案例:

1
2
3
4
// 是否年满18岁
var age = parseInt(prompt("请您输入年龄"));
var s = (age >= 18) ? '18岁了' : '未满18岁';
console.log(s);

表达式

表达式是指可以进行运算,且必须返回一个确定的值的式子,一般由常量、变量、运算符、子表达式构成,最简单的表达式可以是一个简单的值( 常量 or 变量 )

例:

1
2
3
4
5
/* 值表达式 */
1 //数字表达式
'a' //字符串表达式
true //布尔值表达式
a //变量表达式

在实际编程中,可以使用运算符建立复杂的表达式

例:

1
2
3
4 + 3 - 2
a = b * 3 // 赋值表达式 返回赋值结果
a + 3 > b + 3

运算符一般由一些符号组成,如 “+” “/” “=” “%” 等,也有些运算符使用关键字表示,如 typeof

词(token)

词是 JavaScript 中的最小语义单元,包括常量、变量、运算符、表达式、指令等

例:

1
2
3
4
5
6
7
8
/* 变量声明语句 */
var a = 123;
/* 组成 */
var //指令(语句标识符)
a //变量名(标识符)
= //赋值运算符
123 //值(数字)
; //运算符

语句(statement)

在高级语言中,语句是一个能够对计算机下达指令的程序代码

JavaScript 语句通常以一个语句标识符为开始,并执行该语句。语句标识符用来标识程序要执行的动作,语句标识符为保留关键字不能作为任何自定义的标识符使用

多条语句之间用分号( ; )分隔