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

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

《JavaScript启示录》——1.10 原始值比较采用值比较的相关文章

《JavaScript启示录》——导读

前言 本书无关于JavaScript设计模式,也无关于JavaScript面向对象代码实现.本书的写作目的也不是鉴别JavaScript语言特点的好坏.本书并不是一本完整的参考指南.它面向的读者人群并不是编程新手或对JavaScript完全陌生的人员.同时,它也不是一本JavaScript攻略手册.关于上述这些方面的书籍都已经面世. 本书的撰写意图是通过考察原生JavaScript对象和不同环境对原生对象的支持的细微差别,来给读者展现准确的JavaScript世界观:复杂值.原始值.作用域.继承

《JavaScript启示录》——1.7 原始值(或简单值)

查看下面的代码,并思考一下字符串.数字.布尔值.null和undefined值是否可以更加复杂.将它与你所知道的Object()实例或Array()实例或其他任何复杂对象进行比较. <!DOCTYPE html><html lang="en"><body><script> var myString = 'string' var myNumber = 10; var myBoolean = false; // 可以是true,也可以是fal

《JavaScript启示录》——1.9 如何存储和复制原始值

1.9 如何存储和复制原始值 原始值在"面值(face value)"中的存储和操作,理解这一点相当重要.这可能听起来很简单,但是这意味着如果将字符串值"foo"存储在myString变量中,那么从字面上讲,"foo"值同样存储于内存中.为什么了解这个知识很重要?因为一旦开始操作(即复制)值,我们就必须了解它,因为原始值是真实值复制. 在下面的示例中,我们在变量myStringCopy中存储了myString值('foo')的一个副本,其值是真实

JavaScript数据操作_浅谈原始值和引用值的操作本质_javascript技巧

我的一句话总结:原始值不管是变量赋值还是函数传递都不会改变原值,引用值不管是变量赋值还是函数传递,如果新变量重新赋值,则不会影响原引用值,如新变量是直接操作,就会影响原引用值. 首先明确,值和类型是两个不同的概念.例如,null是null类型的唯一值.undefined是undefined类型的唯一值.而true和false是boolean类型仅有的两个值等.在任何语言中,值的操作都可以归纳为以下3个方面. 复制值:即把值赋值给新变量,或者通过变量把值赋值给另一个变量.属性或数组元素. 传递值:

《JavaScript启示录》——1.16 typeof操作符

1.16 typeof操作符 typeof操作符用于返回正在使用值的类型.但它返回的值并不一致,或者说,逻辑上不一致.下面的代码展示了使用typeof操作符所返回的值. <!DOCTYPE html><html lang="en"><body><script> // 原始值 var myNull = null; var myUndefined = undefined; var primitiveString1 = "string

javascript 对象数组根据对象object key的值排序

 本文仅仅是实现了javascript 对象数组根据对象object key的值排序,算是对自己学习javascript这么久的一个小结,希望大家能够喜欢     有个js对象数组 var ary=[{id:1,name:"b"},{id:2,name:"b"}] 需求是根据name 或者 id的值来排序,这里有个风骚的函数 函数定义:   代码如下: function keysrt(key,desc) { return function(a,b){ return

js-如何用JavaScript操作table中tr中td的值?

问题描述 如何用JavaScript操作table中tr中td的值? 如何用JavaScript操作table中tr中td的值? 如何用JavaScript操作table中tr中td的值? 如何用JavaScript操作table中tr中td的值? 解决方案 <html> <head> <title> 修改td中的值 </title> </head> <body> <table id="myTable" wi

javascript,each在Post后,取值取不到

问题描述 javascript,each在Post后,取值取不到 $("#div_t td").each(function () { //alert($(this).text()); $.post("/Home/GetDate", { ID: $("#Name").combobox('getValue'), Date: $(this).text() }, function (data) { if (data.item != null) { ale

Javascript中怎么得到模式窗体返回的值

问题描述 Javascript中怎么得到模式窗体返回的值 解决方案 解决方案二:2.可以通过window.returnValue向打开对话框的窗口返回信息,当然也可以是对象.例如:------------------------------parent.htm<script>str=window.showModalDialog("modal.htm",,"dialogWidth=200px;dialogHeight=100px");alert(str);