《JavaScript启示录》——1.10 原始值比较采用值比较

简介: 可以通过比较原始值来确定其值在字面上是否相同。从逻辑上讲,如果将一个包含数值10的变量与另一个包含数值10的变量进行比较,JavaScript将会认为它们是相等的,因为10与10是相同的(即10===10)。

本节书摘来自异步社区《JavaScript启示录》一书中的第1章,第1.10节,作者:【美】Cody Lindley著,更多章节内容可以访问云栖社区“异步社区”公众号查看

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包含对相同值的引用吗?)。

相关文章
|
存储 JavaScript 前端开发
JavaScript中的原始值与引用值
原始值与引用值 在JavaScript中包含两种不同类型的数据:原始值和引用值 原始值 :是指不包含任何引用的值(简单值),比如数字、字符串、布尔值、null和undefined。 引用值 :是指包含了一个引用的值,比如对象、数组、函数和方法。
|
JavaScript 前端开发 PHP
现代 JavaScript 原始数据类型转换你学会了吗?
现代 JavaScript 原始数据类型转换你学会了吗?
116 0
现代 JavaScript 原始数据类型转换你学会了吗?
|
JavaScript 前端开发
【译】JavaScript原始值的秘密生命 【The Secret Life of JavaScript Primitives】
【译】JavaScript原始值的秘密生命 【The Secret Life of JavaScript Primitives】
105 0
|
存储 JavaScript 前端开发
在 JavaScript 中,我们能为原始类型添加一个属性或方法吗?
在 JavaScript 中,我们能为原始类型添加一个属性或方法吗?
221 0
|
JavaScript 前端开发 Web App开发
JavaScript 原始数据类型转换
Js基础数据类型有7种: 原始数据类型(6种) number (数值) string (字符串) boolean (布尔) null (空对象, typeof 检测为object) undefine(未定义) symbol (符号类型) ...
950 0
|
存储 JavaScript 前端开发
《JavaScript启示录》——导读
本书的撰写意图是通过考察原生JavaScript对象和不同环境对原生对象的支持的细微差别,来给读者展现准确的JavaScript世界观:复杂值、原始值、作用域、继承、head对象等。
1404 0
|
JavaScript 前端开发 容器
《JavaScript启示录》——1.21 JavaScript对象和Object()对象
不要将一般术语“JavaScript对象”与Object()对象混淆。前者指的是JavaScript中对象的概念。Object()对象(如var myObject = new Object())是JavaScript中表示的一个非常特殊的值。
1521 0
|
前端开发 JavaScript
《JavaScript启示录》——1.20 构造函数创建的实例可拥有自己独立的属性(实例属性)
在JavaScript中,对象在任何时候都可以扩展(即动态属性)。正如前面提到的,确切地说,JavaScript拥有易变对象(mutable object)。这意味着通过构造函数创建的对象可以扩展属性。
1147 0
|
JavaScript 前端开发
《JavaScript启示录》——1.19 验证对象是否是特定构造函数的实例
原始值使用对象包装器,判断实例时(如 'foo' instanceof String //返回false),instanceof操作符将返回false。如果使用new操作符创建字符串 'foo',instanceof操作符会返回true。
1218 0

热门文章

最新文章