为了账号安全,请及时绑定邮箱和手机立即绑定

新手看不懂下面的代码,求解释,谢谢!

新手看不懂下面的代码,求解释,谢谢!

慕粉4031128 2017-05-04 19:27:01
function likes (names) {       var templates = [             'no one likes this',              '{name} likes this',             '{name} and {name} like this',             '{name}, {name} and {name} like this',              '{name}, {name} and {n} others like this'     ];       var idx = Math.min(names.length, 4);       return templates[idx].replace(/{name}|{n}/g, function (val) {             return val === '{name}' ? names.shift() : names.length;   }); } ----------------------------------------------------------------------------- 备注:names是一个存储姓名的数组,如["范冰冰","邓超","王宝强","李健"] 主要是最后一句看不懂。 return val === '{name}' ? names.shift() : names.length; “===”不是只能return ture或false吗?那怎么实现字符串的替换? 求帮忙写下注释,谢谢!
查看完整描述

3 回答

已采纳
?
西兰花伟大炮

TA贡献376条经验 获得超318个赞


因为这里只匹配{name}跟{n},如果是{name},还是会返回true,然后就会移除数组第一个元素,并且返回这个元素,这个元素就替换到templates里面的{name},而当匹配到{n}时,则是false,就会返回当前数组的长度,也就替换到{n}的位置,因为匹配name的都被移除了,length也就是剩下元素的长度。欢迎明天采纳

查看完整回答
1 反对 回复 2017-05-04
  • 慕粉4031128
    慕粉4031128
    这种语法是javascript的语法?我学习javascript没有学到过这种语法。有相关的资料可以链接给我看吗?谢谢!
?
洋葱_dot

TA贡献2条经验 获得超0个赞

return val === '{name}' ? names.shift() : names.length;这个的名字我忘了,好像叫三联表达式吧!

意思是:'{name}'是条件,如果成立就是true返回names.shift(),如果是false就返回names.length

另外多说一句:===是全等于,不仅要数值相等,type类型也要相等

查看完整回答
反对 回复 2017-05-05
  • 3 回答
  • 0 关注
  • 1547 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信