zoukankan      html  css  js  c++  java
  • 变量交换之数字交换

    昨天一个前端群里有人出了一个问题,是关于javascript中变量交换的问题,自己私下好好研究了一番,总结如下:

    数字交换可能是这里面方法最为丰富的一种了,因为可以用数学计算的方法来做,若是字符串、对象则不可以。

    借助接三方变量

    这大概是最直观的方法了。不过,这种方法又分为好几种形式。直接哪一个例子来说。

    var a=1,b=2;
    

    交换a,b的值。

    var a = 1,
    	b = 2;
    	
    
    

    1.借助变量temp来交换a,b的值,最常见的一种,不用多说。

    
    var temp = a;
    a = b;
    b = temp;
    console.log(a);   //2
    console.log(b);   //1
    
    
    

    2.借助一个匿名数组来交换a,b的值;

    根据赋值运算符的运算方向,先计算表达式右边;

    [b,b = a] // 把b,a放入一个匿名数组,第二个元素把a的值赋给b;

    [b,b = a][0] // 取出匿名数组第0个值即b;

    a = [b,b = a][0] // 将取出的值赋给a,交换完成。

    
    a = [ b,b = a][0];
    console.log(a);   //2
    console.log(b);   //1
    
    
    

    3.同上,借助一个匿名数组来交换a,b的值,只不过是写法不同;
    不同的是,该方法利用逗号运算符(,)的特性将a的值赋给了b;

    在js中,[b][b=a,0]第二个[]中是一个键值,首先将a的值赋给b;

    然后再进行逗号运算符的运算,最后取匿名数组[b]的第0个值赋给a,即b本身。

    
    a = [b][b = a,0];
    console.log(a);   //2
    console.log(b);   //1
    
    

    总结:当然还可以用显视数组或者对象交换,这些本质都是借助第三方变量,就不再多说。借助第三方变量的优点是不会出现溢出问题。

    用数学计算来交换

    var a = 1,
    	b = 2;
    
    

    1.求和,然后再求出两个变量;
    缺点是存在溢出限制,一旦a+b的值超出了js中所能保存的极限,就会出错。

    
    a += b;
    b = a - b;
    a -= b;
    console.log(a);   //2
    console.log(b);   //1
    
    

    2.巧妙利用乘法。

    
    a = b + (b = a)*0;
    console.log(a);   //2
    console.log(b);   //1
    
    

    3.利用位运算;
    不会出现溢出问题。

    
    a ^= b;
    b ^= a;//其实这一步是这样的b=b^(a^b)=b^b^a=0^a=a
    a ^= b;//同样a=a^b=(a^b)^a=b;
    console.log(a);   //2
    console.log(b);   //1
    
    
    

    最后娱乐一下

    这是最后一种方法,大家笑笑即好。

    
    a = 2;
    b = 1;
    console.log(a);   //2
    console.log(b);   //1
    
    
    
  • 相关阅读:
    Object.prototype.toString.call()进行类型判断
    JavaScript中的typeof操作符用法实例
    js ==与===区别(两个等号与三个等号)
    js nextSibling属性和previousSibling属性概述及使用注意
    Java 缓存技术之 ehcache
    不可不知 DDoS的攻击原理与防御方法
    jQuery的选择器中的通配符[id^='code']
    jquery $("[id$='d']").val();这句话什么意思?
    js 数组的操作
    【转】理解js中的原型链,prototype与__proto__的关系
  • 原文地址:https://www.cnblogs.com/foolgry/p/5029072.html
Copyright © 2011-2022 走看看