第四节:表达式,操作符,优先级,结合性

1、表达式: JS中的短语,解释器遇到短语会计算出一个结果参与运算(简单来说:js的代码就是由操作符和表达式组成的,除了操作符其余均为表达式,例如1+1,两个1就是表达式,+为操作符),表达式分类如下:

① 原始表达式(常量、变量、直接量、关键字、)

  • 常量:不可改变的内容,例如π,或者常见的纯大写命名的内容默认为常量不可更改(一种常见的约定俗称),es6新增的const声明一个只读的常量;
  • 变量:可以改变的内容,随时可以发生变化;
  • 直接量:数字、字符串、正则表达式
  • 关键字

② 初始化表达式:例如创建对象的{},创建数组的[]的创建方式,初始化对象和初始化数组表示的这个东西叫初始化表达式
③ 函数定义表达式:function funName(){},定义表达式的方式称之为函数定义表达式
④函数调用表达式:调用已定义的函数,funName()
⑤属性访问表达式:例如通过点或者中括号查找对象
⑥对象创建表达式:使用new操作符创建一个函数,这种短语称之为对象创建表达式

2、操作符
①一元操作符:(只操作一个表达式的符号),一元加和一元减
对数字进行操作,返回数字本身

var a = 1;
var b=-1;
+a; //1
+b; //-1
//对数字一元减相当于把数字转换为负数
-1; //-1
-2; //-2
var b = -1;
-b;//1

对布尔值操作,true为1,false为0

var a= true;
var b= false;
+a; //1
+b; //0
-true;//-1
-false;//-0 ,一元减原理:先将false转换为数字0,然后转化为负数-0
//备注:-0与0完全相等
-0 === 0; //true

对null和undefined进行操作

+null; //0
+undefined; //NaN
-'123'; //-123
-'abc' //NaN

对字符串进行操作

+'123'; //123
+'abc'; //NaN
+'12ac'; //NaN

备注:正常开发中作用比较小,常用操作(快速转换为数字类型)

②递增(++)与递减(–)

var a=10;
var b = ++a; //先自加再赋值
a; //11
b; //11
var c = 10;
var d = c++; //先赋值,后自加
c; //11
d; //10

关于结合性和优先级

a=1;
b=a+++1; 
a; //2
b; //2
var c=1;
var d=++a+1;
c;//2
d;//3

优先级:属性访问(点和中括号) > 一元运算符 > 乘除 > 加减 > 比较(>,<,>=,<=) > 相等(== , === ,!=, !=== ) > 与运算 > 或运算 > 三目运算 > 赋值运算符

备注: 等号(赋值运算)优先级最低,运算符中一元运算符优先级最高

根据优先级和结合性解释一下 b=a+++1; 和 d=++a+1;的运行规则:
b=a+++1,因为++属于后置递增,所以先进行a+1的运算,所以a+1=1+1=2,然后赋值给b,b=2;运算后a自增加1,a也为2;
d=++a+1,因为++属于前置递增,所以先进行自增+1,a为2,然后计算a+1=2+1=3,再进行赋值,b=3;

var a=3;
a++==3;//true
a;//4
var b =3;
++b==3;//false
b; //4

上面已经说了优先级,但遇到了相同优先及时怎么计算呢?例如有乘法又有除法,这就需要根据结合性进行判断。

结合性:

  • 左结合,从左向右计算,除了一元、三元、赋值其余全部为左结合
  • 右结合(一元运算符、三目运算符、赋值运算)
!a++; //false,从右向左计算,所以返回为布尔而非number
x=a?b:c?d:e?f:g; 
//等价于
x=a?b:(c?d:(e?f:g));
var a=1;
var b=a+++a; //拆分计算,假设c=a++;++后置所以此时先计算后自增,c=1,a=2,c+a=1+2=3;然后赋值给b
b;//3
a;//2
var a=1;
var b=a++ + ++a;//拆分计算,假设c=a++;++后置,此时c=1,a=2;c + ++a;++前置,此时a先进性+1为3,c + ++a = 1+3 = 4;
b; //4
a; //3

结合性总结:除了一元运算符、三目运算符、赋值运算右结合,其余全部左结合

3、一元运算符的妙用
数字、数组快速转字符串

100+'';//'100'
['1',2,'c','age']+''; //'1,2,c,age'

两个!!快速转换布尔类型
逻辑非(!)将值取反,两个!就是将值转换为布尔

!!null; //false
!!undefined; //false
!!0; //false
!!-0; //false
!!''; //false
!!""; //false
!![]; //true
!!{}; //true
!!123; //true
!!'ac'; //true

布尔值的六个false:null、undefined、0、-0、NaN、""/’'空字符串,其余均为true,包括空数组和空对象

4、特殊操作符

  • typeof
  • void
  • delete

备注:本内容学习总结来源于喜马拉雅冰山工作室沙翼老师主讲的(陪你读书(JavaScript WEB前端))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值