您的位置:首页 > Web前端 > JavaScript

js中为什么不能为值类型的变量动态添加属性呢?

2012-06-13 12:37 453 查看
请看一下代码:

<script>
var dog = new Object();
dog.name="xiaobai";
console.log(dog.name);//控制台输出:xiaobai
</script>


然后在看:

<script>
var name = "xiaobai";
name.sex="male";
console.log(name.sex);//控制台输出:undefined
</script>


为什么会出现这种情况呢?关键还是在于语言设计上面,js语言设计方面,对于基本的数据类型如:Undefined、Null、Boolean、Number、String,为了优化查询这些数据的速度把其定义在一个具有固定空间中,即栈中;而对于复杂的数据类型比如说对象(Object),由于这些数据相对来说比较复杂,把其放到栈中并不合适,于是乎它就将这类的数据保存到堆里面,在栈中知识保留指向堆中地址的指针,这样子设计既简化了查询又从一定程度上面减少了内存的消耗,这就是js(或者说ecmascript)语言设计的精妙之处。

我们学技术、学编程、学计算机,无论你是做服务端、客户端、web前端···其实,归根到底就是更好的利用计算机,跟好的利用其资源来为我们服务,返观我们很多的计算机方面很设计方面,比如操作系统,为什么要分用户态、内核态;比如硬件,为什么要分寄存器、高速缓存、内存、磁盘、磁带;比如多线程web服务器,为什么要做成多线程、构造高速缓存把常用的页面放到高速缓存里面····等等,其实都是为了这一点:更好的利用计算机的资源,来为我们服务。

透过现象,我们反思,就能够找到事物的共通的地方····看到事物共同的本质性的东西。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: