js中为什么不能为值类型的变量动态添加属性呢?
2012-06-13 12:37
453 查看
请看一下代码:
然后在看:
为什么会出现这种情况呢?关键还是在于语言设计上面,js语言设计方面,对于基本的数据类型如:Undefined、Null、Boolean、Number、String,为了优化查询这些数据的速度把其定义在一个具有固定空间中,即栈中;而对于复杂的数据类型比如说对象(Object),由于这些数据相对来说比较复杂,把其放到栈中并不合适,于是乎它就将这类的数据保存到堆里面,在栈中知识保留指向堆中地址的指针,这样子设计既简化了查询又从一定程度上面减少了内存的消耗,这就是js(或者说ecmascript)语言设计的精妙之处。
我们学技术、学编程、学计算机,无论你是做服务端、客户端、web前端···其实,归根到底就是更好的利用计算机,跟好的利用其资源来为我们服务,返观我们很多的计算机方面很设计方面,比如操作系统,为什么要分用户态、内核态;比如硬件,为什么要分寄存器、高速缓存、内存、磁盘、磁带;比如多线程web服务器,为什么要做成多线程、构造高速缓存把常用的页面放到高速缓存里面····等等,其实都是为了这一点:更好的利用计算机的资源,来为我们服务。
透过现象,我们反思,就能够找到事物的共通的地方····看到事物共同的本质性的东西。
<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服务器,为什么要做成多线程、构造高速缓存把常用的页面放到高速缓存里面····等等,其实都是为了这一点:更好的利用计算机的资源,来为我们服务。
透过现象,我们反思,就能够找到事物的共通的地方····看到事物共同的本质性的东西。
相关文章推荐
- iOS Runtime 动态添加属性不能添加intrinsic类型
- JS_object添加变量属性_动态属性
- js 对象动态添加属性、合并属性
- js动态给对象添加属性和值
- Js脚本:动态添加HTML自定义属性以及处理html元素的自定义属性(兼容Firefox和IE)
- js变量在属性里的写法 常用mark 多个DL遍历添加一个父级DIV
- 成员变量NSString类型指针的属性为什么用copy(属性)
- 4.2、JS——var 数据类型 节点标签属性操作 动态获取方法
- JS动态为对象添加属性
- 20170702-变量说明,静态方法,类方法区别,断点调试,fork,yield协程,进程,动态添加属性等。。
- 使用变量动态设置js的属性名
- 用于创建实现 System.ComponentModel.INotifyPropertyChanged 接口的动态类型,并添加各个 public 属性的定义
- 用js动态添加html元素,以及属性
- js为object动态添加属性
- 动态添加js对象属性
- JS动态添加div、li、img等元素及设置属性(实例)
- 为什么js是弱类型,动态类型
- Js动态添加事件 实现附加自己的事件属性
- js遍历对象的属性并且动态添加属性
- JS动态创建表格,动态设置属性,动态添加事件