如果你是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 "语句,要么被用作可选的链式运算符,以有条件地分配变量而不发生异常。