JS Ternary Operator
问题:判断 target 是否是 str 的最后几位字符,如果是返回 true,否则返回 false。
```js function confirmEnding(str, target) { str.substring(str.length - target.length) == target ? true : false }
console.log(confirmEnding('Bastian', 'n')) ```
为什么上述代码片段,返回 undefined?因为 str.substring(str.length - target.length) == target 中有未定义的部分。
三元操作符的原始结构:
```js condition ? exprIfTrue : exprIfFalse ```
参数 condition 必须是一个表达式。
str.substring(str.length - target.length) == target 应该是表达式,它满足表达式的一个要求:一段能够返回结果的代码。但并不完全。表达式的所有类型:
- 算术表达式:计算结果为数字的(通常使用算术操作符)
- 字符串:计算结果为字符串(通常使用字符串操作符)
- 逻辑运算:计算结果为
true或false(通常使用逻辑操作符) - 基本/原始表达式:JS 中的基本关键字和通用表达式
this- Grouping operator
( ) - Left-hand-side expressions
new- super
```js function confirmEnding(str, target) { ;(str.substring(str.length - target.length) == target ? true : false) ?? 'not undefined' }
console.log(confirmEnding('Bastian', 'n')) ```
我使用了空值合并操作符,发现 str.substring(str.length - target.length) == target ? true : false 的结果是 undefined。
目前无法解决。
参考资料