现在的位置: 首页 > 综合 > 正文

Javascript 原始值和对象引用

2017年12月05日 ⁄ 综合 ⁄ 共 797字 ⁄ 字号 评论关闭
原始值包括: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原始值和对象引用

抱歉!评论已关闭.