不能在 const 声明中使用 if 语句,但三元运算符有效[重复]

Posted

技术标签:

【中文标题】不能在 const 声明中使用 if 语句,但三元运算符有效[重复]【英文标题】:Can't use if statement inside const declaration, but ternary operator works [duplicate] 【发布时间】:2019-10-30 01:17:41 【问题描述】:

我正在浏览一些编码示例,并遇到了 React 中组件声明的一个示例:

export const TodoList = ( todos ) => (
    <ul>
        
            todos && todos.length
            ? todos.map((todo, index) => 
                return <Todo key=`todo-$todo.id` todo=todo />
            )
            : "No todos, yay!"
        
    </ul>
);

我想尝试将这个三元运算符转换为 if/else 语句,如下所示:

export const TodoList = ( todos ) => (
    <ul>    
        
            if (todos) && (todos.length) 
                todos.map((todo, index) => 
                    return <Todo key=`todo-$todo.id` todo=todo />
                )
             else 
                "No todos, yay!"
            
        
    </ul>
);

但是,我在if 语句开始的那一行得到错误:

解析错误:意外的令牌

为什么三元运算符在这里有效,而 if 语句却无效?

【问题讨论】:

包装一个表达式,如2 + 2x ? y : z。 if 语句是语句,而不是表达式。 啊..我不知道这个。谢谢 无论如何它必须是if (todos &amp;&amp; todos.length)。括号是if 语法的一部分。 【参考方案1】:

s 之间的内容必须是表达式。条件(三元)运算符的计算结果为表达式;另一方面,if 是一个不能作为表达式求值的语句。出于类似的原因,这是无效的:

const foo = if (true) 
  'bar'

见If-Else in JSX:

if-else 语句在 JSX 中不起作用。这是因为 JSX 只是函数调用和对象构造的语法糖。举个基本的例子:

// This JSX:
ReactDOM.render(<div id="msg">Hello World!</div>, mountNode);

// Is transformed to this JS:
ReactDOM.render(React.createElement("div", id:"msg", "Hello World!"), mountNode);

这意味着 if 语句不适合。举个例子:

// This JSX:
<div id=if (condition)  'msg' >Hello World!</div>

// Is transformed to this JS:
React.createElement("div", id: if (condition)  'msg' , "Hello World!");

【讨论】:

【参考方案2】:

if 语句是流控制,而三元运算符是简单的运算符。 if 语句需要代码,三元运算符需要值。

【讨论】:

以上是关于不能在 const 声明中使用 if 语句,但三元运算符有效[重复]的主要内容,如果未能解决你的问题,请参考以下文章

var,let,const的区别和用法

关键字

如何使用 JavaScript 中的三元运算符更改函数中的 if else 语句?

java学习第二天

ES6 const声明常量(简单易懂)

php 中 三元运算和 IF语句 运行速度