1.10 原始值比较采用值比较
可以通过比较原始值来确定其值在字面上是否相同。从逻辑上讲,如果将一个包含数值10的变量与另一个包含数值10的变量进行比较,JavaScript将会认为它们是相等的,因为10与10是相同的(即10===10)。同样,如果将原始字符串“foo”与另一个拥有‘foo’值的原始字符串进行比较也会采用同样的方法。比较的结果是,根据它们的值,它们是彼此相等的(即‘foo’===‘foo’)。
在下面的代码中,我使用原始数字演示了“值比较”的概念,并将它与复杂数字对象进行比较。
<!DOCTYPE html><html lang="en"><body><script>
var price1 = 10;
var price2 = 10;
var price3 = new Number('10'); // 复杂数字对象,因为使用了new
var price4 = price3;
console.log(price1 === price2); // 输出true
// 输出false,因为price3包含了一个复杂数字对象,而price1是原始值
console.log(price1 === price3);
// 输出true,因为复杂对象采用引用比较,而不是值比较
console.log(price4 === price3);
// 如果使price4的值变为原始值,那又如何呢?
price4 = 10;
console.log(price4 === price3); /* 输出false: price4此时是原始值,而非复杂对象 */
</script></body></html>
这里的重点是,在进行比较时,原始值会去检查表示的值是否相等。当使用new关键字创建字符串、数字或布尔值时[如new Number('10')],这个值就不再是原始值。同样地,如果通过字面量语法创建的值进行比较,结果就不同了。这并不奇怪,因为原始值是按值来存储的(10===10成立吗?),而复杂值是按引用来存储的(price3和price4包含对相同值的引用吗?)。
时间: 2024-12-05 08:59:55