一 Js基本数据类型以及内存情况

1 Undefined

Undefined类型只有一个值undefined,在使用了声明但未初始化的变量的时候,这个变量值就是undefined

1 var hi;
2 alert(hi);//undefined

  2 Null

  Null类型也只有一个值null,可以把null理解为一个空指针。    

  3 Boolean  

  Boolean只有两个字面值true和false。

  4 Number

  就是其他语言里的整数和浮点数。     

  5 String

  就是字符序列,可以用单引号或双引号表示 

1 var a =’hi’;
2  var b = “hi”;

以上5种类型在内存中占有固定大小的空间,它们的值保存在栈内存中。

6 Object

    Object类型是其他所有实例的基础。

对于引用类型的值,是在堆内存中分配空间。但由于内存地址大小是固定的,因此内存地址保存在栈内存中,所以查询的时候先从栈内存中取到地址,然后在通过地址找到堆内存中的实际值。

二 变量的复制

基本类型:会在栈上创建一个新的值,然后把该值复制到新变量的位置上。

1          var a = 1;
2 var b = a;

a和b都是1,操作不会相互影响

  引用类型:会将对象复制一份到新分配的变量中,但复制的是指针,而这个指针指向堆中的同一个对象。

1 var a = new object();
2  var b = a;
3 a.name = “hi”;
4 alert(b.name);

三 作用域链

  1 function内定义的变量是局部变量,是作用域链的里层。作用域链是由内向外查找的,找到则停止搜索

  2 没有自己的块级作用域(指的是由花括号封闭的代码块),如if  for语句

  3 不加关键字var 声明的变量是全局变量,当使用var关键字声明变量时,这个变量将被添加到最近的作用域中。

四 面向对象

Javascript中没有类的概念,所以创建对象的方式和其他语言也有很大区别。

1.  简单对象创建

 

 
1 //创建对象
2   var cat = new Object();
3 //属性
4   cat.name = "tom";
5 cat.sex = "boy";
6 cat.age = 16;
7 //方法
8   cat.sayName = function() {
9 alert(this.name);
10 }
11 cat.sayName();
 

2.  构造函数模式

 
1 function Cat(name, sex, age) {
2 this.name = name
3 this.sex = sex
4 this.age = age
5 this.sayName = function() {
6 alert(this.name);
7 }
8 }
9
10 var cat = new Cat("tom", "boy", 16);
11 cat.sayName();
 

3.  结合构造函数和原型模式

prototype属性

通俗的理解是它可以让所有对象的实例共享它所包含的属性和方法。

构造函数用于定义实例属性,原型模式用于定义共享属性和方法。

 
1 function Cat(name, sex, age) {
2 //定义实例属性
3   this.name = name;
4 this.sex = sex;
5 this.age = age;
6 }
7
8 Cat.prototype = {
9 //共享属性和方法
10 canCatchMouse:true,
11 sayName: function() {
12 alert(this.name);
13 }
14 }
15
16 var whiteCat = new Cat("tom", "boy", 16);
17 var blackCat = new Cat("lily", "girl", 13);
18
19 alert(whiteCat.name == blackCat.name);//false
20 alert(whiteCat.canCatchMouse == blackCat.canCatchMouse);//true
 
 
  原文:http://www.cnblogs.com/xqhppt/archive/2011/07/09/2101812.html

Js面向对象和数据类型内存分配(转)的更多相关文章

  1. Java基本数据类型内存分配

    1.java程序运行时有6中地方存储数据,分别是:寄存器.栈.堆.静态存储.常量存储.非RAM(随机存储器),主要是堆与栈的存储.   2.堆与栈是java用来在RAM中存储数据的地方,java自动管 ...

  2. JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  3. JavaSE基础知识(5)—面向对象(5.1类和对象概念、创建及内存分配)

    一.类和对象的相关概念 1.面向对象和面向过程的理解 面向对象和面向过程都属于解决问题的思考方式.面向过程:以执行者的角度思考问题,侧重于“怎么做”,比较适合解决小型项目面向对象:以指挥者的角度思考问 ...

  4. 转:c++内存分配

    第一篇: http://my.oschina.net/pollybl1255/blog/140323 BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS ...

  5. <转载>内存管理内幕-动态分配的选择、折衷和实现 对malloc内存分配有个简单的描述,对内存管理有个大致的说明

    这篇文章看后感觉不错,和我在glibc下的hurdmalloc.c文件里关于malloc的实现基本意思相同,同时,这篇文章还介绍了一些内存管理方面的知识,值得推荐. 原文链接地址为:http://ww ...

  6. 终于懂了:Delphi的函数名不是地址,取地址必须遵守Object Pascal的语法(Delphi和C的类比:指针、字符串、函数指针、内存分配等)good

    这点是与C语言不一样的地方,以前我一直都没有明白这一点,所以总是不明白:函数地址再取地址算怎么回事? ------------------------------------------------- ...

  7. JVM学习之内存分配一

    转自:http://blog.csdn.net/mazhimazh/article/details/16879055,多谢博主分享 我们知道计算机的基本构成是:运算器.控制器.存储器.输入和输出设备, ...

  8. JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配

    Java栈与堆 堆:顺序随意 栈:后进先出(Last-in/First-Out). Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和mu ...

  9. Java静态内存与动态内存分配的解析

    1. 静态内存 静态内存是指在程序开始运行时由编译器分配的内存,它的分配是在程序开始编译时完成的,不占用CPU资源. 程序中的各种变量,在编译时系统已经为其分配了所需的内存空间,当该变量在作用域内使用 ...

随机推荐

  1. 关于存储过程 output 问题

    在游标循环当中给 output 变量赋值报 指定的转换无效 错误必须在存储过程最后再给 output 变量赋值

  2. ios8.3 编译 arm64版 openssl-1.0.2a

    xcode是6.3版的,ios sdk 是8.3的, 到http://www.openssl.org/source/下载最新版本openssl-1.0.2a 解压后用文本编辑器打开configure文 ...

  3. apache开源项目 --Struts

    struts简介 Struts是Apache软件基金会(ASF)赞助的一个开源项目.它最初是jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目.它通过采用JavaServlet/ ...

  4. Android平台下实现录音及播放录音功能的简介

    录音及播放的方法如下: package com.example.audiorecord; import java.io.File; import java.io.IOException; import ...

  5. js获取客户端IP及地理位置

    php获取方法: 1.<?php 2.function get_ip_place(){ 3.$ip=file_get_contents("http://fw.qq.com/ipaddr ...

  6. HTTP请求中浏览器的缓存机制

    摘要:在Web开发过程中,我们可能会经常遇到浏览器缓存的问题.本文作者详细解释了浏览器缓存的机制,帮助读者更深层次的认识浏览器的缓存. 流程 当资源第一次被访问的时候,HTTP头部如下 (Reques ...

  7. 【转】linux线程模型

    一.定义 关于进程.轻量级进程.线程.用户线程.内核线程的定义,这个很容易找到,但是看完之后你可以说你懂了,但实际上你真的明白了么? 在现代操作系统中,进程支持多线程.进程是资源管理的最小单元:而线程 ...

  8. 获取apk信息工具(android SDK的aapt工具)

    aapt命令是android SDK 中的一个工具,功能强大,比如在windows平台获取apk包的信息. 使用该工具准备条件,也即获取aapt.exe文件的方式(2选1即可): 安装android ...

  9. Chromuim开发机配置

    一个出色的程序员需要一台给力的电脑. 之前使用ThinkPad R400笔记本编译Chromium,确实太痛苦了,第一次编译未使用SSD,超过了24小时都没有编译完.后来断断续续折腾了将近一个月才编译 ...

  10. UVALive 5029

    用字典树来查询,关键是怎么处理输入的8个数字代表的字符,把每个数分别除以0.95和1.05得到8的区间,按左区间从小到大排序,那么和第一个区间有交集的必然代表二进制0,与它没交集的之后都是1,因为题目 ...