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

时间:2016-03-05 08:41:02

标签: javascript syntax

我使用codefights和其中一个解决方案来查找字符串是否是回文照片如下:

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

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

2 个答案:

答案 0 :(得分: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``上阅读此问题:Backticks calling a function

(*)差不多。在处理this时,常规函数和数组函数之间存在差异。

答案 1 :(得分:0)

这相当于这个功能:

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

它只有一些ES2015糖语法,如arrow functions (params) => expressionspread operator [...variable]template literals `string text`