• javascrpt—变量(2)


    javascript变量是松散类型的本质,决定了它只是特定时间用于保存特定值的一个名字而已,

    由于不存在定义变量的必须保存何种数据类型值的规则,变量的值及数据类型可以在脚本的生命周期内改变

    变量的数据类型可分为基本数据类型和引用类型;

    基本数据类型值指的是简单的数据段,而引用类型是多个值构成的对象;

    再将一个值赋给变量时,解析器必须确定这个值是基本类型还是引用类型,

    基本类型:(undefined、null、Number、Boolean、String)是按值访问的,因为可以操作保存在变量中的实际的值
    引用类型:引用类型的值保存在内存中的对象;

    javascript不允许直接访问内存中的位置,即不能直接操作对象的内存空间,
    在操作对象时,实际上是在操作对象的引用而不是实际的对象,故引用类型的值是按引用访问的!

    1、我们不能给基本类型的值添加属性,尽管这样不会犯错

    1 var person= new Object();
    2 person.name='naruto';
    3 alert(person.name);
    4 name.age='20';
    5 alert(name.age);

    2、复制变量的值
    (1)基本类型:如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,
    然后把该值复制到为新变量分配的位置上

    var num1=0;
    var num2=num2;

    (2)引用类型:当一个变量向另一个变量复制引用类型的值,同样会将存储在对象中的值复制一份到新变量的空间,
    不同的是,这个值的副本实际上是同一个指针,而这个指针指向存储在堆中的一个对象!
    复制结束后两个变量实际将引用同一个对象

    1 var obj1=new Object();
    2 var obj2=obj1;
    3 obj1.name='naruto';
    4 alert(obj2.name)//naruto

    3、值传递
    ECMAScript中所有函数的参数都是按值传递的,也就是说,把函数外部的值复制给函数内部的参数!
    基本类型的传递如同基本类型的复制,引用类型的传递如同引用类型的复制

    //基本类型
    function addTen(num){
        num+=10;
        return num;
    }
    var count=20;
    var result=addTen(count);
    alert(count);//20
    alert(result);//30
    
    //引用类型
    function setName(obj){
        obj.name='naruto';
    }
    var person=new Object();
    setName(person);
    alert(person.name);//naruto
    
    
    function setName(obj){
        obj.name='naruto';
        
        obj=new Object();
        obj.name='narutowlll';
    }
    var person=new Object();
    setName(person);
    alert(person.name);//naruto
    //在函数内部重写obj时,这个变量引用就是一个局部对象,
    //这个局部对象在函数执行完立即被销毁!

    4、类型检测

    (1)typeof操作符确定一个变量是String、Number、Boolean、undefined
    如果一个对象是null或对象,typeof会返回Object

     1 var i='naruto';
     2 var j=true;
     3 var k=0;
     4 var u;
     5 var v=null;
     6 var o=new Object();
     7 
     8 alert(typeof i);//string
     9 alert(typeof j);//boolean
    10 alert(typeof k);//number
    11 alert(typeof u);//undefined
    12 alert(typeof v);//object
    13 alert(typeof o);//object

    (2)instanceof:检测对象的类型;如果使用instanceof检测基本类型数据时,则始终返回false;

    1 var person=new Object()
    2 alert(person instance Object);//true
    3 var date=new Date();
    4 alert(date istanceof Date)//true
    5 var arr=new Array();
    6 alert(arr instance Array);//true

    参考:《javascript高级程序设计》第三版

  • 相关阅读:
    【1801視聴説2宿題】中国のリサイクル事情やごみの分別事情に対する意見
    【1701日本語新聞編集】第2回3月6日
    【1701新聞編集宿題】興味のあるネットニュース
    【1801日語写作】第2回:3月5日
    【1801日語听解4】第2回:3月3日
    【1801日本語新聞選読】第2回:3月3日
    不解压查看tar.gz包内文件
    设计模式——适配器模式
    ubuntu安装jre
    设计模式——抽象工厂模式
  • 原文地址:https://www.cnblogs.com/wl-naruto/p/6795136.html
Copyright © 2020-2023  润新知