zoukankan      html  css  js  c++  java
  • 值类型和引用类型

    两种类型:

    ECMAScript变量包含两种不同类型的值:基本类型值、引用类型值;

    1. 基本类型值:指的是保存在栈内存中的简单数据段;
    2. 引用类型值:指的是那些保存在堆内存中的对象,意思是,变量中保存的实际上只是一个指针,这个指针执行内存中的另一个位置,由该位置保存对象;

    两种访问方式:

    1. 基本类型值:按值访问,操作的是他们实际保存的值;
    2. 引用类型值:按引用访问,当查询时,我们需要先从栈中读取内存地址,然后再顺藤摸瓜地找到保存在堆内存中的值;

    JS的基础类型与引用类型

     两种类型复制

    1. 基本类型变量的复制:从一个变量向一个变量复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上;
       JS的基础类型与引用类型
    2. 引用类型变量的复制:复制的是存储在栈中的指针,将指针复制到栈中未新变量分配的空间中,而这个指针副本和原指针执行存储在堆中的同一个对象;
    3. 复制操作结束后,两个变量实际上将引用同一个对象;因此改变其中的一个,将影响另一个;
      JS的基础类型与引用类型

    函数参数的传递:

    ECMA中所有函数的参数都是按值传递的;

    这个很容易混乱,意思就是参数都是基本类型,都是值,不是对象。

    1 function setName (obj) {
    2     obj.name = 'Nicholas';
    3     obj = new Object();
    4     obj.name = 'Greg';
    5 }
    6 
    7 var person = new Object();
    8 setName(person);
    9 alert(person.name); //"Nicholas"

    两种变量类型检测

    • Typeof操作符是检测基本类型的最佳工具;
    • 如果变量值是nul或者对象,typeof 将返回“object”;
    • Instanceof用于检测引用类型,可以检测到具体的,它是什么类型的实例;
    • 如果变量是给定引用类型的实例,instanceof操作符会返回true;
      alert(person instanceof Object); //变量person是Object吗?
      alert(person instanceof Array); //变量person是Array吗?
      alert(person instanceof RegExp); //变量person是RegExp吗?
  • 相关阅读:
    ef 模块实体 转json出错的解决
    两个简单的前台显示构架01
    oracle 常用系统表
    直接在文本看代码,谁能指出错在哪里
    action script3.0殿堂之路.pdf 读书笔记
    flashbuilder4.6 as3.0 调试服务器端swf(flash)文件
    .ashx 一般处理文件阻塞处理,所有页面卡死的解决方案
    计算一年中所有周的时间段
    整理的靠谱的软件试玩平台,已亲测能提现
    Java限制同一字符出现N次
  • 原文地址:https://www.cnblogs.com/niubenbit/p/4076322.html
Copyright © 2011-2022 走看看