学习js先把内存管理想清楚
对于任何语言来讲,不管他们是如何定义自己语言的规则,目的只有一个,那就是操作内存数据(如何从内存里取数据,如何操作取出来的数据,然后如何把操作后的数据放进去),js虽然是弱类型的语言(在内存开辟的变量类型归属会根据使用情况的变化而变化),但万变不离其宗,那就是怎么也逃不出值类型和引用类型两大数据类型,这两大类型有自己的规则,那就是不能互相变换,但这里有个问题可能大家觉得很奇怪:
String.prototype.name="http://qijifu.com";var val=23;alert(val.name);弹出“http://qijifu.com” |
(注:下面说的类型就是引用类型和值类型的区分)
有些人可能就要问为什么作为值类型的val变量可以像对象一样的形式来访问呢,是不是它就转成引用类型的数据了呢?!那我来告诉你,这里val根本就没有变它的类型,说过每个语言它都有自己的规则,这个规则就是程序在执行val.name的时候,它会瞬时地在栈中开辟一块空间放类似如下代码(val=new Number(),val.name),记住哦,这里说的是瞬时,运行完这行代码后,立即销毁创建的引用对象,这时val堆空间就又回到指向原来的值类型的数据了,所以后面你以为可以通过如下val.age=23; alert(val.age);是错误的,因为到这里已经是值类型数据23了,23当然不能开辟属性值了。
如果你还不好理解的话,送上图一张:

对照图去理解上面讲的,后续会继续分析js是如何围绕内存定义自己的规则进行操作内存数据的!!
总之记住一句话,我们学的是语言的规则,内存的数据是任何语言的目标对象(所有语言基本差不多),唯一的差别是规则

浙公网安备 33010602011771号