var a ; a&&a.c==1 为什么不报错?

image.png

优先级   . 大于== 大于&& 

按优先级解释, 为什么不先算 a.c==1  ?

符号优先级

image.png

阅读 2.5k
5 个回答

你不能只看运算符,你的看表达式, && 后面是一个表达式, xxx && xxxx 是一个表达式,两个表达式怎么能一起算优先级?

因为优先级和求值顺序无关,大多数运算符结合性是从左到右,只有三个优先级是从右至左结合的,单目运算符、条件运算符、赋值运算符,所以 && 是从左到右的
运算符优先级 - mdn

&&是逻辑与运算,逻辑与是一种短路逻辑,如果左侧表达式为 false,则直接短路返回结果,不再运算右侧表达式,就是这么定义的,运算逻辑如下:

第 1 步:计算第一个操作数(左侧表达式)的值。
第 2 步:检测第一个操作数的值。如果左侧表达式的值可转换为 false(如 null、undefined、NaN、0、""、false),那么就会结束运算,直接返回第一个操作数的值。
第 3 步:如果第一个操作数可以转换为 true,则计算第二个操作数(右侧表达式)的值。
第 4 步:返回第二个操作数的值。

还有一句话比较重要,优先级与求值顺序无关。如a+b && b*c,虽然*优先级最高,但这个表达式求值顺序是从左到右。

  1. && 运算,左边为true才会执行右边, a为undefined(转换后为false)
  2. 你试一下 true && a.c == 1 便会执行右边的运算,就会报错

首先从左到右 符号优先级也要同级(同个段位? 大概就这么个意思)比较吧
&&是会 阻塞(中断?)右侧信息的, 所以这个根本就没到解析a.c的时候

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题