带问号的JavaScript变量(附代码)

1,005 阅读1分钟

如果你是JavaScript的新手,变量后面的问号可能会让你感到困惑。让我们来解释一下。问号在JavaScript中通常被用作条件运算符--当与冒号(:)和问号(?)一起使用时称为**三元运算符**--有条件地分配一个变量名:

const isBlack = false;
const text = isBlack ? 'Yes, black!' : 'No, something else.';
console.log(text);// "No, something else."

要么表达式为真,返回问号(?)之后的值,要么表达式为假,返回冒号(:)之后的值。

这种JavaScript变量声明虽然是作为一种速记方法使用的。你可以用JavaScript中的**"if-else "语句**作为条件操作符,与三元操作符相比,实现同样的效果,但它会变得更加冗长:

const isBlack = false;

let text;
if (isBlack) {
  text = 'Yes, black!';
} else {
  text = 'No, something else.';
}

console.log(text);
// "No, something else."

如果这不是你要找的,那么你可能在寻找JavaScript的**可选链式**功能。它是用来有条件地分配一个变量的。

const person = {
  name: 'Robin Wieruch',
  pet: {
    name: 'Trixi',
  },
};

const petName = person.pet?.name;
console.log(petName);
// "Trixi"

如果这个人没有宠物,输出将是undefined ,而不会抛出一个JavaScript异常:

const person = {
  name: 'Robin Wieruch',
};

const petName = person.pet?.name;
console.log(petName);
// undefined

当JavaScript没有这个功能时,通常使用AND(&&)运算符或之前的三元组运算符(?:)来避免任何JavaScript异常:

const person = {
  name: 'Robin Wieruch',
};

let petName = person.pet && person.pet.name;
console.log(petName);
// undefined

petName = person.pet ? person.pet.name : undefined;
console.log(petName);
// undefined

最常见的是,你会发现JavaScript中的问号有这两种使用情况。它要么被用作速记条件运算符,而不是常用的 "if-else "语句,要么被用作可选的链式运算符,以有条件地分配变量而不发生异常。