变量、作用域和内存问题 (一)

   在哪个编程语言中都逃离不了理解对象的厄运,对象这个东西就是一个明明我没有但是必须要去了解的东西,笑,js相比于其他的各大编程语言来说规范性其实没有那么严格,首先就从为对象属性这一点来说,声明对象的方式有很多,比如随便采用其中的一种,然后动态为声明的对象添加属性:

 

var person=Object();
person.name="your name";
console.log(person);//{name:"your name"}

 

在上面的代码中,一开始声明的person是一个没有任何属性的对象,在第二行直接采用了直接声明person的属性name,并给它赋初值为"your name"的方法,这样简单的一句话就可以直接让person对象有了自己的第一个属性name。

注意对于对象规范的写法是{name:"your name"},也就是对象的属性名是不需要打引号的,这个容易和json数据的格式搞混。

  知道了在js中怎么定义对象以及如何为对象动态的添加属性,下面就是对象和基本类型变量的基本区别:

传统意义上,基本类型的数据是独立的,也就是说如果有以下的代码

var a=10;
var b=a;
b=15; console.log(a);//10 console.log(b);//15

虽然b的值是a给的,但是这两个变量在内存中有自己独立的空间,所以后面对b的重新赋值并不会影响到a。

但是对象就不太一样了,对象作为一个引用类型存在堆中,变量其实是一个指向对象的指针,也就是说当对对象进行复制操作的时候,其实是把变量中保存的指向对象的指针赋给了新的变量,两个变量同时指向堆中的同一个变量,在这种情况下的修改往往是同步的

var person={name:"your name"};
var child=person;
child.name="another name";
console.log(child.name);//another name
console.log(person.name);//another name

 

第一次写,就先稍微少些一点,明天说的是,虽然在js中对象的赋值传的是引用,但是在ECMAScript标准下的所有函数的参数都是按值传递的,也就是说不管函数的参数是基本数据类型还是像对象这样的引用数据类型,只要它们作为函数的参数,传递的都是值。

 

转载于:https://www.cnblogs.com/yuruilee/p/6023630.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值