首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优先顺序:逻辑运算符或三元运算符

优先顺序:逻辑运算符或三元运算符
EN

Stack Overflow用户
提问于 2017-02-03 14:09:30
回答 2查看 6.1K关注 0票数 4

请考虑以下几点:

(编辑:我稍微修改了函数,删除了三元操作符的用法或大括号)

代码语言:javascript
复制
function someFunction(start,end,step){
  var start = start || 1,
      end = end || 100,
      boolEndBigger = (start < end);   // define Boolean here
      step = step || boolEndBigger ? 1:-1;
  console.log(step); 
}

someFunction()
// step isn't defined so expect (1<10) ? 1:-1  to evaluate to 1

someFunction(1,10)  
// again step isn't defined so expect to log 1 as before

问题: 定义了someFunction(1,10,2) //step,快捷逻辑或someFunction应该启动,//step应该返回2,但它返回1

我知道这很容易通过使用大括号来解决:

代码语言:javascript
复制
function range(start,end,step){
  var start = start || 1,
      end = end || 100,
      step = step || ((start < end) ? 1:-1);
  console.log(step); 
}

的问题:,为什么||运算符在这种情况下没有捷径? 我知道逻辑OR在二进制逻辑条件运算符中的优先级最低,但它认为比条件三元运算符具有更高的优先级? 我是不是误读了操作符优先的MDN文档

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-03 14:18:57

是的,||运算符比条件?:运算符具有更高的优先级。这意味着它首先被执行。从你的链接页面

运算符优先级确定计算运算符的顺序。首先对优先级较高的运算符进行评估。

让我们看看这里的所有操作:

代码语言:javascript
复制
step = step || (start < end) ? 1:-1;

优先级最高的操作符是()分组操作。在这里,它导致false

代码语言:javascript
复制
step = step || false ? 1 : -1;

下一个最高优先级是逻辑OR运算符。step是真实的,所以它导致了step

代码语言:javascript
复制
step = step ? 1 : -1;

现在我们做三值运算,这是唯一剩下的。同样,step是真实的,所以第一个选项被执行。

代码语言:javascript
复制
step = 1;
票数 11
EN

Stack Overflow用户

发布于 2018-06-18 21:40:09

JavaScript是松散类型的,这意味着每当运算符或语句需要特定的数据类型时,JavaScript将自动将数据转换为该类型。

让我们看看它如何转换为其他类型的一些场景

示例1.

if()语句需要一个布尔值,因此括号中定义的任何内容都将转换为布尔值。

根据这种转换的结果(即真或假),JavaScript值通常被称为“真实”或"falsey“。

记住,如果一个价值是真实的,除非它是已知的假的。

幸运的是只有六个法尔赛-

  1. 假的(当然!)
  2. 未定义
  3. 0(数字零)
  4. "“(空字符串)
  5. NaN (非A数)

示例2.

var x=动物园星;

如果动物园的计算结果为真,则返回动物园的值,否则返回星值。

示例3.

代码语言:javascript
复制
var str = '1' || '2';

'1‘不是falsey,因此返回'1’的结果是: str = '1';

示例4.

代码语言:javascript
复制
var str = '1' || (true) ? '2' : '3';

首先,x(逻辑OR)运算符的优先级大于?(条件)运算符。

因此,首先( '1‘x (true) )将首先进行评估。

'1‘不是falsey,所以'1’将被返回

中间结果: str = '1‘?’2‘:'3’

'1‘是不真实的,所以'2’将被退回

最终结果: str = '2‘

示例5.

代码语言:javascript
复制
var str = '1' || (false) ? '2' : '3';

首先,x(逻辑OR)运算符的优先级大于?(条件)运算符。

因此,首先( '1‘x (false) )将首先进行评估。

'1‘不是falsey,所以'1’将被返回

中间结果: str = '1‘?’2‘:'3’

'1‘是不真实的,所以'2’将被退回

最终结果: str = '2‘

现在,在您的场景中很容易找到:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42026158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档