需要对以下类型的Javascript代码进行解释

问题描述 投票:0回答:2

我使用 codefights,查找字符串是否为回文的解决方案之一如下:

PalindromeOrNot = s =>
s == [...s].reverse().join`` ? `Yes` : `No`

这里PalindromeOrNot是函数名,s是参数。我知道第二行直接返回 Yes 或 No 但没有使用 return 关键字。另外,我从未在 Javascript 的其他地方看到过这样的代码。有人可以解释一下吗?

javascript
2个回答
2
投票

让我们来解构这个:

PalindromeOrNot =    // an assignment
s => stmt            // arrow notation, shorthand(*) for function (s) { return stmt; }
s ==                 // ...where "stmt" is: a comparison
[...s]               // array destructuring (turns s into an array of characters)
.reverse().join``    // reverse the array, join with the empty string
?                    // ternary operator (after the comparison)
`Yes` : `No`         // results of the ternary, either 'Yes' or 'No',
                     // depending on whether the string equals its reverse

换句话说,这是一种奇特的写作方式

PalindromeOrNot = function (s) {
    return s == s.split('').reverse().join('') ? 'Yes' : 'No';
}

.join``
阅读这个问题:反引号调用函数


(*) 差不多了。在处理

this
时,常规函数和数组函数是有区别的。


0
投票

它将相当于这个功能:

PalindromeOrNot = function (s) {
  return s == s.split('').reverse().join('') ? 'Yes' : 'No';
}

它只有一些 ES2015 糖语法,例如 箭头函数

(params) => expression
扩展运算符
[...variable]
模板文字
`string text`

© www.soinside.com 2019 - 2024. All rights reserved.