zoukankan      html  css  js  c++  java
  • JS_高程4.变量,作用域和内存问题(1)

    1.基本类型和应用类型的值

      ECMAScript变量可能包含两种不同数据类型的值:

      基本类型值——简单的数据段。(5种基本的数据类型,按值访问,因为可以操作保存在变量中的实际的值。)

      引用类型值——多个值构成的对象。(引用类型的值是保存在内存中的对象。)

    注意:

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

    说明:

      其实上面这种说法不严谨,但复制保存着对象时,操作的是对象的引用。但是为对象添加属性时,操作的是对象。

    另:在很多语言中,字符串以对象来表示,因此被认为是引用类型的。ECMAScript放弃了这一传统。

    (1)可以为引用类型的值动态地添加属性

    eg:

    1 var person=new Object(); //注意,Object的第一个字母为大写,如果小写会出现错误。
    2     person.name="Linshuling";
    3     alert(person.name);
    4     </script>

    (2)复制变量值

      

      复制基本类型的值:

      eg:var num1=5;

        var num2=num1;

      如上的例子,num1和num2是完全独立的,虽然它们的值都为5。

      

      复制引用类型的值:

      eg:

    1  var obj1=new Object();
    2     var obj2=obj1;
    3     obj1.name="Linshuling";
    4     alert(obj2.name);

      如上,当一个变量向另一个变量复制引用类型的值是,同样也会将变量对象中的值复制一份放到位新变量分配的空间中。不同的是,这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象。复制操作结束后,两个变量实际上将引用同一对象。因此,改变其中一个变量,就会影响另一个变量。

    (3)传递参数

      ECMAScript中所用函数的参数都是按值传递的。(访问变量有按值和按引用两种,而参数只能按值传递。)

      以下两个例子体会使用对象类型值的按值传递:

      eg:

      

    1  function setName(obj){
    2         obj.name="Linshuling";
    3     }
    4     var person=new Object();
    5     setName(person);
    6     alert(person.name);

    1  function setName(obj){
    2         obj.name="Linshuling";
    3         obj=new Object();
    4         obj.name="lin";
    5     }
    6     var person=new Object();
    7     setName(person);
    8     alert(person.name);

    (4)检测类型

      用typeof操作符可以检测一个变量是什么基本数据类型,当变量的值是null和对象时,typeo操作符会返回“Object”。当我们想知道对象时什么类型的对象时,可以用instanceof操作符。

    语法如下:

      result = variable instanceof constructor

    如果变量是给定引用类型的实例,instanceof会返回true。

    eg:

      

    1 alert(person instanceof Object);   //变量person是Object吗?

    注意:

      ECMA-262规定任何在内部实现[[Call]]方法的对象都应该在应用typeof操作符时返回“function”,由于Safari 5及之前版本和Chrome 7及之前版本的正则表达式实现了这个方法,因此对正则表达式应用typeof会返回“function”,在ie和Firefox中,对正则表达式应用typeof会返回“Object”

      

      

  • 相关阅读:
    SpringBoot 创建 console程序
    SpringBoot 参数检查 Controller中检查参数是否合法
    SpringBoot 使用maven创建springboot项目
    idea 社区版本创建javaweb项目 使用jetty
    idea 社区版本创建javaweb项目 使用tomcat
    mysql 主从 设置
    windows 使用nginx
    Linux 安装Nginx
    闭包小应用
    js小程序写法优化
  • 原文地址:https://www.cnblogs.com/LinSL/p/6163849.html
Copyright © 2011-2022 走看看