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
  • 相关阅读:
    c++中结构体的使用
    指针、引用、引用和函数参数、引用和const、const 和 #define、#define的特殊用途
    用eclipice抓取JS代码
    UITableView读取plist文件
    GameKit框架简介、通过蓝牙实现对等网络连接
    照片选择步骤及部分代码
    通知(消息)机制(本地推送和远程推送及实现步骤)
    游戏中心-内购—应用内购买修改应用程序信息
    粒子效果的使用建议、粒子编辑器各属性说明
    如何判断用户是否登录
  • 原文地址:https://www.cnblogs.com/baweier2013/p/5084182.html
Copyright © 2011-2022 走看看