JavaScript 语法条件语法?和
JavaScript Syntaxt conditional syntaxt ? and
经常发现条件语法,如数组后跟“?”和 ”。”和元素,例如 - edges[0]?.node
。如何解读以下代码?
export default function Index({ allPosts: { edges }, preview }) {
const heroPost = edges[0]?.node;
const morePosts = edges.slice(1);
....// rest of the code
}
这是 if-else 语句的单行 shorthand。它被称为条件运算符。1
这是一个可以使用条件运算符缩短的代码示例:
var codeName;
if (userIsYoungerThan18) {
codeName = "Minor";
} else {
codeName = "Adult";
}
if (memberCheck) {
serveDrink("Grape Juice");
} else {
serveDrink("Wine");
}
这可以用 ?: 缩短,如下所示:
var codeName = userIsYoungerThan18 ? "Minor" : "Adult";
serveDrink(memberCheck ? "Grape Juice" : "Wine");
与所有表达式一样,条件运算符也可以用作具有副作用的独立语句,尽管这在缩小之外并不常见:
memberCheck ? serveGrapeJuice() : serveWine();
它们甚至可以链接起来:
serveDrink(userIsYoungerThan4 ? 'Milk' : memberCheck ? 'Grape Juice' : 'Wine');
不过要小心,否则你会得到像这样令人费解的代码:
var k = a ? (b ? (c ? d : e) : (d ? e : f)) : f ? (g ? h : i) : j;
function getFee(isMember) {
return (isMember ? '.00' : '.00');
}
console.log(getFee(true));
// expected output: ".00"
console.log(getFee(false));
// expected output: ".00"
console.log(getFee(null));
// expected output: ".00"
参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator
逻辑与运算符
const a = true, b = false;
const c = 4;
// logical AND
console.log(a && a); // true
console.log(a && b); // false
console.log((c > 2) && (c < 2)); // false
使用 AND
a1 = true && true // t && t returns true
a2 = true && false // t && f returns false
a3 = false && true // f && t returns false
a4 = false && (3 == 4) // f && f returns false
a5 = 'Cat' && 'Dog' // t && t returns "Dog"
a6 = false && 'Cat' // f && t returns false
a7 = 'Cat' && false // t && f returns false
a8 = '' && false // f && f returns ""
a9 = false && '' // f && f returns false
这是 optional chaining
运算符 (?.),它使您能够读取位于连接对象链深处的 属性 的值,而无需检查链中的每个引用在每个参考中都有效,保护您免受错误 Uncaught TypeError: Cannot read properties of undefined
这个运算符就像 .链接运算符,除了如果引用被认为是无效的(这意味着 null 或未定义),表达式不会导致错误,而是使用 return 值 undefined 短路(因此,不会抛出异常)。
const person = {
name: 'John',
dog: {
name: 'cc'
}
};
const dogName = person.dog?.name;
console.log(dogName);
console.log(person.cat?.name?.prop); // undefined instead of throwing an error
经常发现条件语法,如数组后跟“?”和 ”。”和元素,例如 - edges[0]?.node
。如何解读以下代码?
export default function Index({ allPosts: { edges }, preview }) {
const heroPost = edges[0]?.node;
const morePosts = edges.slice(1);
....// rest of the code
}
这是 if-else 语句的单行 shorthand。它被称为条件运算符。1
这是一个可以使用条件运算符缩短的代码示例:
var codeName;
if (userIsYoungerThan18) {
codeName = "Minor";
} else {
codeName = "Adult";
}
if (memberCheck) {
serveDrink("Grape Juice");
} else {
serveDrink("Wine");
}
这可以用 ?: 缩短,如下所示:
var codeName = userIsYoungerThan18 ? "Minor" : "Adult";
serveDrink(memberCheck ? "Grape Juice" : "Wine");
与所有表达式一样,条件运算符也可以用作具有副作用的独立语句,尽管这在缩小之外并不常见:
memberCheck ? serveGrapeJuice() : serveWine();
它们甚至可以链接起来:
serveDrink(userIsYoungerThan4 ? 'Milk' : memberCheck ? 'Grape Juice' : 'Wine');
不过要小心,否则你会得到像这样令人费解的代码:
var k = a ? (b ? (c ? d : e) : (d ? e : f)) : f ? (g ? h : i) : j;
function getFee(isMember) {
return (isMember ? '.00' : '.00');
}
console.log(getFee(true));
// expected output: ".00"
console.log(getFee(false));
// expected output: ".00"
console.log(getFee(null));
// expected output: ".00"
参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator
逻辑与运算符
const a = true, b = false;
const c = 4;
// logical AND
console.log(a && a); // true
console.log(a && b); // false
console.log((c > 2) && (c < 2)); // false
使用 AND
a1 = true && true // t && t returns true
a2 = true && false // t && f returns false
a3 = false && true // f && t returns false
a4 = false && (3 == 4) // f && f returns false
a5 = 'Cat' && 'Dog' // t && t returns "Dog"
a6 = false && 'Cat' // f && t returns false
a7 = 'Cat' && false // t && f returns false
a8 = '' && false // f && f returns ""
a9 = false && '' // f && f returns false
这是 optional chaining
运算符 (?.),它使您能够读取位于连接对象链深处的 属性 的值,而无需检查链中的每个引用在每个参考中都有效,保护您免受错误 Uncaught TypeError: Cannot read properties of undefined
这个运算符就像 .链接运算符,除了如果引用被认为是无效的(这意味着 null 或未定义),表达式不会导致错误,而是使用 return 值 undefined 短路(因此,不会抛出异常)。
const person = {
name: 'John',
dog: {
name: 'cc'
}
};
const dogName = person.dog?.name;
console.log(dogName);
console.log(person.cat?.name?.prop); // undefined instead of throwing an error