- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CoffeeScript的解构赋值
CoffeeScript的解构赋值
CoffeeScript有个语法叫解构赋值(Destructuring Assignment) ,可以将⼀个对象的不同成
员⼀次性赋值给多个的变量。官⽹中给 下⾯⼀个例⼦:
futurists =
sculptor: Umberto Boccioni
painter: Vladimir Burliuk
poet:
name: .T . Marinetti
address: [
Via Roma 42R
Bellagio , Italy 2202 1
]
{poet: {name , address: [street , city]}} = futurists
alert name + — + street
运⾏结果⾃然是 .T . Marinetti — Via Roma 42R ,因为coffee将其翻译为下⾯的JS :
var city , futurists, name , street , _ref , _ref 1;
futurists = {
sculptor: Umberto Boccioni,
painter: Vladimir Burliuk ,
poet: {
name: .T . Marinetti,
address: [Via Roma 42R , Bellagio , Italy 2202 1]
}
};
_ref = futurists.poet , name = _ref .name , (_ref 1 = _ref .address, street = _ref 1[0], city =
_ref 1[1]);
alert(name + — + street);
这个语法跟Erlang的模式匹配有点类似,不同的是,Erlang会严格匹配等号两边,不赋
值的要⽤_作为占位符,否则运⾏时将抛出异常,⽽coffee则不会,对于不存在的成
员,值为undefined :
{poet: {nameX , address: [streetX , city]}} = futurists
# nameX = undefined
# streetX = .T . Marinetti
当然,对⼀个不存在的成员继续解析还是会抛出异常的:
{poetX:{a}} = futurists
# TypeError: Cannot read property a of undefined
另外,和JS⼀样,coffee也可以连续赋值:
a=b= 100
# a= 100
# b= 100
假如将上⾯两种语法组合在⼀起,会怎样呢?就像下⾯的代码,最终d=?
a={b:1,c:2,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 转成下⾯的JS :
b = a.b , c = a.c;
这样看来,d最终的值会是2 ,这也太奇怪 吧?
还是看⼀下coffee把 d={b ,c}=a 到底翻译成什么吧:
d = (b = a.b , c = a.c , a);
结果在意料之内,d的值不是 2
结果在意料之外,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把该表达式的值抛弃 。
那么,在JS⾥,普通赋值表达式的值,是不是也是等号右边的值呢?下⾯的JS语句,
result最终应该等
您可能关注的文档
- CDMA时间服务器.pdf
- CDMA系统下行链路的干扰对消.pdf
- CES上展示了那么多科技新创想,可惜很多还不够成熟.pdf
- CES东航外汇点差表.pdf
- Ce掺杂锐钛矿型TiO_2密度的泛函理论应用.pdf
- CFG桩复合地基承载力经验公式的修正及应用.pdf
- CFM56-3发动机MEC可靠性分析.pdf
- CFM56—3发动机MEC可靠性分析.pdf
- Cfmajc2010年高考数学选择试题分类汇编——复数.doc
- CFG桩复合地基的原理和设计_邓跃光.pdf
- 2025年一级建造师考试《水利水电工程管理与实务》冲刺必刷卷.docx
- 2025年一级建造师考试《水利水电工程管理与实务》逆袭破题卷1.docx
- 2025年一级建造师考试《市政工程管理与实务》冲刺必刷卷 .docx
- 2025年一级造价工程师考试《建设工程计价》预习卷.docx
- 2025年一级造价工程师考试《建设工程造价管理》预习卷.docx
- 2025年一级造价工程师考试《建设工程造价案例分析(安装专业)》预习卷.docx
- 2025年一级造价工程师考试《建设工程造价案例分析(土建专业)》预习卷.docx
- 2025年中级会计考试《会计实务》冲刺提分卷.docx
- 2025年中级会计考试《财务管理》冲刺提分卷.docx
- 2025年中级会计考试《财务管理》全真模拟卷.docx
文档评论(0)