除了简单的表达式还有复杂的表达式,它是由简单表达式构成的,将简单表达式组合成复杂表达式最常见的方法就是使用运算符
表达式分为简单表达式和复杂表达式,但最后的结果均是返回一个值
简单表达式又称为原始表达式,由原始数据值构成,是表达式中最小的单位,简单表达式包含常量和变量,常量与变量相对应,变量相当于未知数。而常量相当于已知数,在程序运行中,常量不会被更改
110 // 数值常量
1.1001e7 // 数值常量 科学记数法
"兄弟连" // 字符串常量
常量返回值是其本身,所以它们又被称为原始值,除了字符串和数值外还包括boolean类型的true和false、null类型的唯一值null和正则表达式
true // 布尔类型常量
null // 空值常量
/\d{4}/ // 特殊字符常量
变量也是简单的表达式之一,变量如果没有被赋值会被默认为undefined,也就是说它最终会返回一个值
简单表达式与复杂表达式是相对存在的,复杂表达式可以说是简答表达式的组合,最常见的复杂表达式是有简单表达式和运算符组成的
var num = 1;
console.log(1 + 1); // 为复杂表达式
直接量表达式又称为字面量表达式,它最终返回的值就是其本身,直接量表达式又分为函数直接量表达式、数组直接量表达式、对象直接量表达式
其它表达式包括数组元素访问表达式、对象属性访问表达式、函数调用表达式以及对象创建表达式
运算符又称为操作符,除算数元算符还有赋值运算符、关系运算符、逻辑运算符、位元算符和其它运算符,js中的运算符可以适用于不同的数据类型,当然也会涉及到类型转换的问题
运算符 | 含义 | 使用格式 | 本质 |
---|---|---|---|
+ | 加法 | a+b | 本质 |
- | 减法 | a-b | 本质 |
* | 乘法 | a*b | 本质 |
/ | 除法 | a/b | 本质 |
% | 取余/求模 | a%b | 本质 |
+ | 取正 | +b | 本质 |
- | 取负 | -b | 本质 |
++ | 数值加1后赋值 | a++ / ++a | a = a+1 |
– | 数值减1后赋值 | a-- / --a | a = a-1 |
// 这里重点说下++ 和 -- 运算,递增++ 和递减-- 符号可以放置在操作数的前面或者后面,
// 这种写法称为前增量和后增量或者前减量、后减量,如果单独使用没啥区别,
// 但在运算时、表达式中、流程控制中或者输出中会产生差异
var num = 1;
num++;
console.log(num); // 2
++num;
console.log(num); // 3
num--;
console.log(num); // 2
--num;
console.log(num); // 1
var num =1;
console.num(num++); // 1
console.log(++num); // 3
console.log(num--); // 3
console.log(--num); // 1
// 总结:
// 当在表达式中使用时,会出现前增量、先累加、后使用;后增量、先使用、后增加,减量与增量的规则一致
运算符 | 含义 | 使用格式 | 常规表达式 |
---|---|---|---|
= | 赋值 | a=b | a=b |
+= | 相加后赋值 | a += b | a = a+b |
-= | 相减后赋值 | a-=b | a = a-b |
*= | 相乘后赋值 | a*=b | a = a * b |
/= | 相除后赋值 | a/=b | a = a / b |
%= | 取余后赋值 | a%=b | a = a%b |
关系运算符又称比较运算符,用来判断运算符左右两个值的关系,或者比较运算符左右两个值的大小
运算符 | 含义 | 使用格式 |
---|---|---|
> | 大于 | a>b |
< | 小于 | a<b |
>= | 大于等于 | a>=b |
<= | 小于等于 | a<=b |
== | 等于 | a==b |
!= | 不等于 | a!=b |
=== | 全等于 | a===b |
!== | 不等于 | a!==b |
运算符 | 含义 | 使用格式 |
---|---|---|
&& | 逻辑与/并且 | a&&b |
|| | 逻辑或/或者 | a||b |
! | 逻辑非 | !a |
逻辑与有短路现象,当判断第一个操作数为false时,就不会去判断第二个操作数
逻辑或也有段路现象,当判断第一个为true并且第二个为false也判定为true
逻辑非运算时,操作数会被转换为布尔值,并且取反,然后返回布尔值
位运算在编程语言中位于最底层,它是按内存中数值的位来计算数值的。会涉及到计算机底层原理知识,一般不会用到,后面有时间会写一下相关的内容(待补充)
运算符 | 含义 | 使用格式 |
---|---|---|
& | 位与 | b&a |
| | 位或 | a|b |
~ | 位非 | ~a |
^ | 异或 | b^a |
<< | 左移 | b<<a |
>> | 右移 | b>>a |
>>> | 无符号右移 | b>>>a |
运算符 | 含义 | 使用格式 |
---|---|---|
typeof | 查看类型 | typeof a |
delete | 删除属性 | delete a |
void | 取消返回值 | |
in | 验证属性是否存在 | a in b |
instanceof | 验证对象是否为类的实例 | | |
?: | 判断表达式,弱真则为执行问好后的表达式,若假则为冒号后面的表达式 | a ? b : c |
new | 构造对象 | new A |
// 实例判断运算符,用于判断一个对象是否为一个类的实例
var nums = [1,2,3,4];
console.log(nums instanceof Array); // true
// 删除属性运算符,用来删除对象属性或数组中的元素,返回值为true或false
var obj = {name:"知数SEO"};
delete obj.name;
// 属性验证运算符,用来验证一个对象是否包含某个属性,返回true和false
var obj = {name:"知数SEO"};
console.log("name" in obj);
// 取消返回值运算符,用于解析表达式,并返回undefined
// 例如这个运算符用于阻止<a>标签跳转
<>a href="javascript:void(1=1)"点击链接跳转</a>
// 表达式 ? 真区间 : 假区间
// 表达式为真时,则执行真区间代码,否则执行假区间代码
console.log(1+1 == 2 ? "真区间" : "假区间");