走出 null 就是空值的误区,以及变量赋值原理
先放一张图片作为引入:
这里我用了一个示意图作为讲解:
平时,我们写的变量为什么能在我们调用它的时候就能被我们拿到所用,跟存钱罐一样,你往里面存一元大洋,它里面就有一元大洋,那么我们的变量在被我们创建出来的时候被存放在哪呢?内存!内存被分为几大块,只是我们平时不知道,内存大体被分为几大块,其中有三大块我们经常用到,栈区,堆区,常量区。
首先,我创建了个变量,上图的 num 当我 var num : Number 的时候这个时候,我们只是简单的创建了一个变量,这个时候的变量是没有任何意义的,它只是在栈区里开辟了一块内存,给这段内存一个标记 num ,接下来我们要对它进行赋值,如 : var num : Number = 123; 当我们给它赋值的时候,实际内存为我们在堆区里开辟了一块内存,这时候内存里放的才是真正我们所需要的值 123 ,这个时候栈里的变量 num 引用了堆里的值 123 ,这个时候才是真正的符合我们的需要。
在内存里还有一块区域叫 常量区 ,里面放置了一些恒古不变的数据当我们的var str:String = null;的时候,这个时候引用了我们常量区里的值null,而并没有引用我们堆里的值,所以这个时候我们的str变量并没有引用到具体的一个值,这个时候str也并没有被初始化,而下面的str1它引用的空值,实际上,内存已经为它在堆区里开辟了一块内存,只是这个时候放的是空值,用个小测试就能得到这个证明:
var str:String = null;
var str1:String = "";
trace(str.length);
trace(str1.length);
str 返回 undefined;
str1返回0;
还有个问题我也要特别提醒一些新手,new 这个关键字我相信大家已经非常熟悉了,new 的真正意义是什么呢?
实际上你每 new 一次,就相当于在堆区里开辟一个存储空间至于存储的什么类型,那就是你 new 什么类型,里面放的就什么类型。
其实上面的 num, str 它直接赋值只是你们看到的假象,在Flash的内核里实际上它帮你做了自动转换,如:
var num:Number = 123; 它实际上帮你做的事是 var num : Number = new Number(123); 只是它是隐式的,你看不到罢了
简单的记住,我们通过给变量赋值,就是通过栈区里的变量引用堆区里的值。
以上是本人简单的做了下讲解,希望对大家有帮助,关于内存分区的内容太多,这里就不一一讲解了,有兴趣的朋友可以查阅相关资料进行加深理解。
走出 null 就是空值的误区,以及变量赋值原理的更多相关文章
- Sql Server查询性能优化之走出索引的误区
据了解绝大多数开发人员对于索引的理解都是一知半解,局限于大多数日常工作没有机会.也什么没有必要去关心.了解索引,实在哪天某个查询太慢了找到查询条件建个索引就ok,哪天又有个查询慢了,再建立个索引就是, ...
- 走出MFC子类化的迷宫
走出MFC子类化的迷宫 KEY WORDS:子类化 SUBCLASSWINDOW MFC消息机制 许多Windows程序员都是跳过SDK直接进行RAD开发工具[或VC,我想VC应不属于RAD]的学习 ...
- 在8X8的棋盘上分布着n个骑士,他们想约在某一个格中聚会。骑士每天可以像国际象棋中的马那样移动一次,可以从中间像8个方向移动(当然不能走出棋盘),请计算n个骑士的最早聚会地点和要走多少天。要求尽早聚会
在8X8的棋盘上分布着n个骑士,他们想约在某一个格中聚会.骑士每天可以像国际象棋中的马那样移动一次,可以从中间像8个方向移动(当然不能走出棋盘),请计算n个骑士的最早聚会地点和要走多少天.要求尽早聚会 ...
- ofo走出校园观察:市场定位导致产品错位?
Ofo和摩拜单车虽然同样都是做单车共享,但实际上两者在最初的市场定位是有明显的差异的,因此提供的产品方案也存在巨大的差异. 市场定位不同,导致产品方案的巨大差异 摩拜单车一开始就定位于开放市场,充分的 ...
- js中的undefined与null、空值的比较
最近在修改一个项目,总是报Js错误: 无法获取属性“length”的值: 对象为 null 或未定义 点开调试之后,惊奇的发现markerArr的值是undefined 所以我就将代码改成如下形式: ...
- 为什么DIY报价----走出软件作坊:三五个人十来条枪 如何成为开发正规军(十二)[转]
前段时间,写了一个开发.实施.服务费用计算三部曲. 水清则无鱼--走出软件作坊:三五个人十来条枪 如何成为开发正规军(八) 实施费用也能DIY--走出软件作坊:三五个人十来条枪 如何成为开发正规军(九 ...
- 将服务费用DIY到底----走出软件作坊:三五个人十来条枪 如何成为开发正规军(十)[转]
前一段时间,讲了一系列开发经理.实施经理.服务经理的工具箱:开发经理的工具箱---走出软件作坊:三五个人十来条枪 如何成为开发正规军(三) ,实施经理的工具箱--走出软件作坊:三五个人十来条枪 如何成 ...
- 走出测试,走向CEO
飞测说:大家好,我们又见面了,我是黑夜小怪.不巧,今晚加班回来路上,湿身了,淋了个落汤鸡,不过明天也许可以看海了,也就呵呵了,原本想回来后聊些技术的,现在突然想先聊聊我的一些想法,仅供交流. 走出测试 ...
- Oracle NULL 和空值
如果你工作中用到了Oracle,你必须要留意NULL和空值的处理与SQL Server上的不同.现在让我们看些例子. 建立这张数据库表并插入记录 CREATE TABLE TestNull(Col ...
随机推荐
- 微软免费TFS如何设置在客户端独占签出
最近发现微软给我们提供了免费的TFS,地址:http://tfs.visualstudio.com/, 就注册了一个,但是我发现没办法独占签出. 在公司里,TFS有服务端,所以很好设置,但是注册微软的 ...
- GDB---Oracle Function Call List
http://yong321.freeshell.org/Oracle Function Call List 1. Oracle function call list If you want to s ...
- opengl之vsh、fsh简易介绍+cocos2dx 3.0 shader 变灰
认识着色器 理解OpenGL渲染管线,对于学习OpenGL非常重要.下面是OpenGL渲染管线的示意图:(图中淡蓝色区域是可以编程的阶段) 此图是从wiki中拿过来的,OpenGL的渲染管线主要包括: ...
- 基于HTML5实现的中国象棋游戏
棋类游戏在桌面游戏中已经非常成熟,中国象棋的版本也非常多.今天这款基于HTML5技术的中国象棋游戏非常有特色,我们不仅可以选择中国象棋的游戏难度,而且可以切换棋盘的样式.程序写累了,喝上一杯咖啡,和电 ...
- spring data redis使用示例
1. 配置依赖文件 <dependencies> <dependency> <groupId>org.springframework.data</groupI ...
- 关于Android中TextView显示多个空格
一.直接填写文字,输入多少,显示多少,如下: android:text="AAA AAA" ————————>显示:AAA AAA 二.通过设置str ...
- IOS UIButton 自定义的补充学习
一直自定按钮 遇到两个做的不好的地方. 1 是按钮响应方法时候状态自定义不好看 按压感不明显 2 是button上的title 是我自己用label写上去的 而不是用button的属性 这两天终于运用 ...
- 【阿里云产品公测】ACE安装wordpress博客图文教程
作者:阿里云用户51干警网 阿里云ace搭建wordpress图文教程 按照大大说的,wordpress确实能够轻松创建,只有几步. 我想说,小白的世界技术大大还是不了解.想当初我了解一下怎么 ...
- 源自梦想 自定义ViewGroup的整理_2
Android项目: 1.准备资源图片.图片放到hdip里和mdip里对想过的影响:对于320*480的模拟器,默认去mdip里去找图片资源,拿过来的图片可以直接用,清晰度不变.要是所要找的图片在hd ...
- android studio还不错
今天体验了哈 Android Studio,还不错同Elipse类似