zoukankan      html  css  js  c++  java
  • JS_对各类型数据的操作方式_ByValue/ByReference

    今天学习了对js各类型数据的操作种类:按值操作、按引用操作,总结如下:

    原始类型的number,boolean,是按照值操作的;object类型(包括function,array),是按照引用操作的

    所说的操作,体现在三个方面:

    复制,参数传递,比较

    其实这样来区分,js是出于效率考虑的:number,boolean占用字节少,所以按值操作不会降低效率(copy就copy一个独立的值,参数传递也是传递独立的参数,即使改变其值不影响原来变量,比较也是按照值逐位比较)。而object呢,可能会很大,所以按引用来操作提高效率(copy操作是copy对原变量的引用,参数传递也是传递原变量的引用,改变其值会影响原来变量所指向的值,比较也是比较的引用)。

    对于string来说就比较特殊,string是原始类型,但又特殊在其长度可以任意变化,对其操作可以这样理解:复制、传值是按照引用操作的(但string是固定不变的,所以js中并不提供改变其值的方法,如有charAt(),没有setCharAt()),比较方法则是按值比较的,因为js解释器认为比较字符串,就是比较每个字节是否一致。

    示例代码:

     1 //copy by value
     2 var n = 1;
     3 var m = n;//m is 1 now.
     4 
     5 //transfer param by value
     6 function changeNumber(m, n) {
     7     m = m + n;
     8 }
     9 changeNumber(m, n);
    10 
    11 //compare by value
    12 if (n == m) {
    13     alert('ok');
    14 }
    15 
    16 //copy by reference
    17 var d1 = new Date(2015, 11, 25);
    18 var d2 = d1;
    19 //now ,d2 and d1 refer to a same date obj.
    20 alert(d2.toDateString());
    21 
    22 d1.setDate(10);
    23 alert(d2.getDate());//change d1,d2 changed too,for they refer to the same object.
    24 
    25 
    26 function changeArray(array, m) {
    27     array[0] = array[0] + m;
    28     array[1] = array[1] + m;    
    29     array[2] = array[2] + m;
    30 }
    31 var a1 = [1, 2, 3, 4, 5];
    32 changeArray(a1, 3);
    33 alert(a1[0]);//4
  • 相关阅读:
    使用Dorado框架开发必备参考
    Dorado重用最佳实践
    css布局_web
    dorado学习笔记(二)
    Oracle归档日志删除
    给大家拜年啦!
    悟透JavaScript
    BCM57781网卡驱动下载地址
    win7安装jdk完后配置
    win7删除SVN保存的本地密码
  • 原文地址:https://www.cnblogs.com/baweier2013/p/5084182.html
Copyright © 2011-2022 走看看