CoffeeScript赋值.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CoffeeScript赋值

CoffeeScript赋值 CoffeeScript有个语法叫解构赋值(Destructuring Assignment) ,可以将⼀个对象的不同成 员⼀次性赋值给多个的变量。官⽹中给 下⾯⼀个例⼦: futurists = sculptor: Umberto Boccioni painter: Vladimir Burliuk poet: name: F.T . Marinetti address: [ Via Roma 4 R Bellagio, Italy 0 1 ] {poet: {name, address: [street, city]}} = futurists alert name + — + street 运⾏结果⾃然是 F .T . Marinetti — Via Roma 42R ,因为coffee将其翻译为下⾯的 S : var city, futurists, name, street, _ref, _ref1; futurists = { sculptor: Umberto Boccioni, painter: Vladimir Burliuk, poet: { name: F.T . Marinetti, address: [Via Roma 4 R, Bellagio, Italy 0 1] } }; _ref = futurists.poet, name = _, (_ref1 = _ref.address, st alert(name + — + street); 这个语法跟Erlang的模式匹配有点类似,不同的是,Erlang会严格匹配等号两边,不赋 值的要⽤_作为占位符,否则运⾏时将抛出异常,⽽coffee则不会,对于不存在的成 员,值为undefined : {poet: {nameX, address: [streetX, city]}} = futurists # nameX = undefined # streetX = F.T . Marinetti 当然,对⼀个不存在的成员继续解析还是会抛出异常的: {poetX :{a}} = futurists # TypeError: Cannot read property a of undefined 另外,和 S⼀样,coffee也可以连续赋值: a=b=100 # a=100 # b=100 假如将上⾯两种语法组合在⼀起,会怎样呢?就像下⾯的代码,最终d=? a={b:1,c: ,x :3,y :4} d={b,c}=a 简单分析下: 赋值语句的结合顺序是从右到左,所以 d={b,c}=a 等价于 d=({b,c}=a) 我们还知道,赋值表达式的值是其本⾝,那么 {b,c}=a 的值是什么呢, {b,c} 还 是 a ? 可以尝试下,coffee会将语句 {b,c}=a 转成下⾯的 S : b = a.b, c = a.c; 这样看来,d最终的值会是2 ,这也太奇怪 吧? 还是看⼀下coffee把 d={b,c}=a 到底翻译成什么吧: d = (b = a.b, c = a.c, a); 结果在意料之内,d的值不是 结果在意料之外,d的值不是 {b,c} 我⼀直以为,像 {b,c}=a 这样的表达式,返回值将会是 {b,c} ⽽不是 a ,然 后 d={b,c}=a 可以按过滤器的⽅式执⾏。但是,我错 ,{b,c}=a 这个表达式的 值是 a 再写⼏⾏代码验证⼀次: f = (a) - {b,c}=a coffee将上⾯的代码翻译成 f = function(a) { var b, c; return b = a.b, c = a.c, a; }; 好吧,解析赋值表达式的值确实是等号右边的值。 ⾄于 {b,c}=a 为何会被译成 b = a.b, c = a.c; 估计是因为该表达式的值不产 ⽣副作⽤,所以coffee把该表达式的值抛弃 。 那么,在 S⾥,普通赋值表达式的值,是不是也是等号右边的值呢?下⾯的 S语句, result最终应该等于expr 1还是expr2呢? result = expr1 = expr 乍眼⼀看,可能会觉得 result==expr1 且 result==expr ,等于哪个都⼀样。

文档评论(0)

ctuorn0371 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档