面试题:a,b 两个变量,不用第三个变量来切换两个变量的值

Haisen大王 2016-07-07 03:27:01
我是这样去解决的,结果群里小伙伴们不服。
var a = 10,
b = 20;
a = {
a: a,
b: b
};
b = a.a;
a = a.b
console.log('a:' + a + ',' + 'b:' + b);

...全文
379 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Haisen大王 2016-07-10
  • 打赏
  • 举报
回复
引用 9 楼 jslang 的回复:
[quote=引用 8 楼 lhs472194266 的回复:] [quote=引用 7 楼 jslang 的回复:] [quote=引用 6 楼 lhs472194266 的回复:] [quote=引用 2 楼 jslang 的回复:] a=[b,b=a][0]
我尝试着去理解,不过失败了。。我该看篇什么文章来 捋清这个 用法[/quote] 你哪里不理解?[/quote] 我从没见过可以在数组里 b=a这样的用法,而且在 [b,b=a][0] 在获取第一个元素 和 b =a 赋值的先后顺序是个什么样的机制。。。 [/quote] b=a 是赋值表达式、可以像普通的表达式一样用于任何表达式中,也包括在数组中使用。 a=[b,b=a][0]的执行顺序是: 第一步把b的值放入数组的0下标中; 第二步执行b=a赋值表达式,对b重新赋值,并把这个值放入数组的1下标,这个数组的1下标是没有用的,b=a写这里是为了让它在第三步之前执行。 第三步把数组的0下标赋值给a。 [/quote] 我明白了。我这里应该是 与C的传递方式搞混了,C++没好好学。
天际的海浪 2016-07-08
  • 打赏
  • 举报
回复
引用 8 楼 lhs472194266 的回复:
[quote=引用 7 楼 jslang 的回复:] [quote=引用 6 楼 lhs472194266 的回复:] [quote=引用 2 楼 jslang 的回复:] a=[b,b=a][0]
我尝试着去理解,不过失败了。。我该看篇什么文章来 捋清这个 用法[/quote] 你哪里不理解?[/quote] 我从没见过可以在数组里 b=a这样的用法,而且在 [b,b=a][0] 在获取第一个元素 和 b =a 赋值的先后顺序是个什么样的机制。。。 [/quote] b=a 是赋值表达式、可以像普通的表达式一样用于任何表达式中,也包括在数组中使用。 a=[b,b=a][0]的执行顺序是: 第一步把b的值放入数组的0下标中; 第二步执行b=a赋值表达式,对b重新赋值,并把这个值放入数组的1下标,这个数组的1下标是没有用的,b=a写这里是为了让它在第三步之前执行。 第三步把数组的0下标赋值给a。
Haisen大王 2016-07-08
  • 打赏
  • 举报
回复
引用 7 楼 jslang 的回复:
[quote=引用 6 楼 lhs472194266 的回复:] [quote=引用 2 楼 jslang 的回复:] a=[b,b=a][0]
我尝试着去理解,不过失败了。。我该看篇什么文章来 捋清这个 用法[/quote] 你哪里不理解?[/quote] 我从没见过可以在数组里 b=a这样的用法,而且在 [b,b=a][0] 在获取第一个元素 和 b =a 赋值的先后顺序是个什么样的机制。。。
天际的海浪 2016-07-08
  • 打赏
  • 举报
回复
引用 6 楼 lhs472194266 的回复:
[quote=引用 2 楼 jslang 的回复:] a=[b,b=a][0]
我尝试着去理解,不过失败了。。我该看篇什么文章来 捋清这个 用法[/quote] 你哪里不理解?
Haisen大王 2016-07-08
  • 打赏
  • 举报
回复
引用 2 楼 jslang 的回复:
a=[b,b=a][0]
我尝试着去理解,不过失败了。。我该看篇什么文章来 捋清这个 用法
天际的海浪 2016-07-07
  • 打赏
  • 举报
回复
在ES6规范中还有一种语法“解构赋值” [a,b]=[b,a]; 这个要用最新版本的谷歌浏览器中才能执行
cocotsau 2016-07-07
  • 打赏
  • 举报
回复
顶2楼,js的奇淫奇巧
天际的海浪 2016-07-07
  • 打赏
  • 举报
回复
引用 1 楼 slwsss 的回复:
var a=10,b=20; a=a^b;b=a^b;a=a^b; console.log(a,b)
异或交换是最经典的,不过只能用于数值型数据
天际的海浪 2016-07-07
  • 打赏
  • 举报
回复
a=[b,b=a][0]
slwsss 2016-07-07
  • 打赏
  • 举报
回复
var a=10,b=20; a=a^b;b=a^b;a=a^b; console.log(a,b)

87,902

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧