Javascript 原始值和对象引用

原始值包括:undefined、null、布尔值、数字和字符串;对象包括数组和函数。
原始值是不可更改的,这对于数字和布尔值来说很好理解,改变一个数字的值本身就说不通。但是,对于字符串来说就不太明显了,字符串看起来有点像是字符组成的数组,然而JavaScript是禁止通过指定索引来修改字符串中的字符的。字符串中有的方法看上去是返回了一个修改后的字符串,实际上却是返回的一个新的字符串值,看下面的例子(在firebug中运行可看到结果

var s = "hello";
s.toUpperCase();
log(s); //输出的字符串任然是“hello”,而不是“HELLO” 

原始值的比较是值的比较,也就是说只有当它们的值相等时它们才相等。同样,对于字符串来说并不明显,如果比较两个单独的字符串,当且仅当它们的长度相等并且每个索引的字符都相等时,JavaScript才认为它们是相等的。
对象和原始值不同,它们是可变的,也就是说它们的值是可以修改的。对象的比较并不是值的比较,就算两个对象包含相同的属性和相同的属性值,它们也是不相等的,例如(在firebug下运行查看结果):
var o = {x: 1}, p = {x:1};
console.log(o === p); // 输出false,两个单独的对象是不相等的
var a = [], b = [];
console.log(a === b); // 输出false,两个单独的数组是不相等的


通常,把对象称为引用类型,一次来和基本类型区分开。对象值都是引用,因此对象的比较都是引用的比较,当且仅当它们引用同一个基对象时,它们才相等,例如:
var a = [];
var b = a;
b[0] = 1;
console.log(a[0]); // 输出1,变量a也会被修改
console.log(a === b); // 输出true,a 和 b 引用同一个数组,因此相等


转载请注明: 前端日志网  »   JavaScript原始值和对象引用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值