使用三元运算符

时间:2020-05-04 13:50:05

标签: javascript

我正在练习使用Tenary运算符,但结果显示为未定义。我不知道我在这段代码中在哪里做错。你能帮我吗?

let userName = prompt(`Enter Your User Name`);
let pass = prompt(`Enter Your Password`);

let message;

(userName === `Employee` && pass === 1234) ? message = `Hello ${userName}`:
  (userName === `Director` && pass === 4567) ? message = `Hello ${userName}` :
  (userName === `` || pass === ``) ? message = `One or More field is blank` : `Denied`;

console.log(message);

4 个答案:

答案 0 :(得分:1)

您需要在表达式外添加一个赋值。

然后,您需要检查字符串,因为prompt返回null来取消或返回一个字符串。

另一个提示,如果template literal不包含动态内容,请改用字符串,这样会更快并且不会引起不适。

警告:请不要使用这种嵌套结构。容易出错,可以替换为功能并提前退出。

let userName = prompt('Enter Your User Name');
let pass = prompt('Enter Your Password');

let message = userName === 'Employee' && pass === '1234'
    ? `Hello ${userName}`
    : userName === 'Director' && pass === '4567'
        ? `Hello ${userName}`
        : userName === '' || pass === ''
            ? 'One or More field is blank'
            : 'Denied';

console.log(message);

答案 1 :(得分:1)

条件运算符的想法是,它形成一个表达式,该表达式的计算结果为结果值,因此可以将其用于例如在

const message = …

不过,您已经将赋值表达式用作其操作数,这使得它只是if / else语句的较差副本:

if (userName === `Employee` && pass === 1234) message = `Hello ${userName}`
else if (userName === `Director` && pass === 4567) message = `Hello ${userName}`
else if (userName === `` || pass === ``) message = `One or More field is blank`
else `Denied` ;

在最后一个块中,您忘记了分配,因此message变量保留了其undefined的值。

应该是

const message = (userName === `Employee` && pass === 1234)
   ? `Hello ${userName}`
   : (userName === `Director` && pass === 4567)
     ? `Hello ${userName}`
     : (userName === `` || pass === ``)
       ? `One or More field is blank`
       : `Denied`;

答案 2 :(得分:1)

您正在使用===运算符(检查值和类型)将pass变量与Number类型进行比较,但实际上提示执行的操作是将String类型设置为pass。 如果您希望它起作用,只需将代码更改为以下内容即可:

let userName = prompt(`Enter Your User Name`);
let pass = prompt(`Enter Your Password`);

let message;

(userName === `Employee` && pass === "1234") ? message = `Hello ${userName}`:
  (userName === `Director` && pass === "4567") ? message = `Hello ${userName}` :
  (userName === `` || pass === ``) ? message = `One or More field is blank` : `Denied`;

console.log(message);```

答案 3 :(得分:1)

如果您只有这3-4个条件,我建议使用const styles = StyleSheet.create({ header: { flexDirection: 'row', zIndex: 10000, elevation: 5, marginBottom: 8 * 2, }, container: { flex: 1, paddingTop: Constants.statusBarHeight, backgroundColor: '#ecf0f1', padding: 8, }, card: { backgroundColor: '#fff', padding: 8, elevation: 3, shadowColor: '#000', shadowOffset: { width: 1, height: 1 }, shadowOpacity: 0.15, margin: 10, }, }); 语句而不是三元语句 并且不会超出那个范围

注意:避免使用嵌套三元运算符。

if

选项2

如果您可能有更多这样的选择,请尝试这种方法 注意:这只是一个伪代码,您可能必须对其进行更改才能使其起作用:)

const userName = prompt(`Enter Your User Name`);
const pass = prompt(`Enter Your Password`);
let message = 'Denied';

if (userName === `Employee` && pass === 1234) {
  message = `Hello ${userName}`;
} else if (userName === `Director` && pass === 4567) {
  message = `Hello ${userName}`;
} else if (userName === '' || pass === '') {
  message = `One or More field is blank`;
}

console.log(message);