和几乎所有的WEB编程语言一样,”==”与”===”是不同的,一个是判断值是否相等,一个是判断值及类型是否完全相等。
经常有人用混这两个运算符,不过,今天刚巧翻开“犀牛”,发现了原来,用这两个运算符判断两个值是否满足条件是有一定规则的。
“犀牛”这本书里的说法很值得人思考,就是把“相等运算符”读作“等于”,而把“等同运算符”读作“完全等同”。
下面,就让我们仔细了解一下,这其中的秘密吧。
在javascript中,比较数字、字符串和布尔值时使用的都是值(value)。在这种情况下,需要涉及到两个不同的值。
对两个字符串来说,只有当它们存放的字符完全相同时,它们才相等。
比较对象、数组和函数(都是昨天说过的,引用类型的)时全长的则是引用。
上面这句话告诉我们,只有两个变量引用的是同一个对象时,它们才是相等的。但是两个不同的数组,无论如何也是不相等地。即使它们存放的元素完全相同。
var a = 1;
var b = 1;
document.write('变量a的值是:'+a+'变量b的值是:'+b);
document.write('<br/>');
document.write('判断变量a是否等于变量b:<font color="red">');
document.writeln(a==b);
document.write('</font><br/>');
document.write('判断变量a是否完全等同变量b:<font color="red">');
document.writeln(a===b);
document.write('</font><br/>');
var arr_a = [1,2,3];
var arr_b = [1,2,3];
document.write('变量数组arr_a的值是:'+arr_a+'变量数组arr_b的值是:'+arr_b);
document.write('<br/>');
document.write('判断变量arr_a是否等于变量arr_b:<font color="red">');
document.writeln(arr_a==arr_b);
document.write('</font><br/>');
document.write('判断变量arr_a是否完全等同变量arr_b:<font color="red">');
document.writeln(arr_a===arr_b);
document.write('</font><br/>');
var arr_c = [1,2,3];
var arr_d = arr_c;
document.write('直接把引用复制给新数组,比较值结果为:<font color="red">');
document.writeln(arr_c===arr_d);
document.write('</font><br/>');
下面的规则用于判定===运算符比较的两个值是否相等的判断条件
- 如果两个值的类型不同,它们就不相同。
- 如果两个值是数字,而且值相同,那么除非其中一个或两个都是NaN(这种情况它们不是等同的),否则它们是等同的。值NaN永远不会与其他任何值等同,包括它自身(奇怪的家伙),要检测一个值是否是NaN,可以使用全局函数isNaN()。
- 如果两个值都是字符串,而且在串中同一位置上的字符完全相同,那么它们就完全等同。如果字符串的长度或内容不同,它们就不是等同的。
- 如果两个值都是布尔型true,或者两个值都是布尔型false,那么它们等同。
- 如果两个值引用的是同一个对象、数组或函数,那么它们完全等同。如果它们引用的是不同的对象(数组或函数),它们就不完全等同,即使这两个对象具有完全相同的属性,或两个数组具有完全相同的元素。
- 如果两个值都是null或都是undefined,它们完全相同。
下面的规则用于判定==运算符比较的两个值是否相等的判断条件
- 如果两个值具有相同的类型,那么就检测它们的等同性。如果这两个值完全相同,它们就相等。如果它们不完全相同,则它们不相等。
- 如果两个值的类型不同,它们仍然可能相等。用下面的规则和类型转换来检测它们的相等性
- 如果一个值是null,另一个值是undefined,它们相等。
- 如果一个值是数字,另一个值是字符串,把字符串转换为数字,再用转换后的值进行比较。
- 如果一个值为true,将它转化为1,再进行比较。如果一个值为false,把它转化为0,再进行比较。
- 如果一个值是对象,另一个值是数字或字符串,将对象转换成原始类型的值,再埋比较。可以使用对象的toString()方法或valueOf()方法把对象转化成原始类型的值。JavaScript核心语言的内部类通常先尝试valueOf()方法转换,再尝试toString()方法转换,但是对于Date类,则先执行toString()方法再执行valueOf()方法转换。不属于JavaScript核心语言的对象则可以采用JavaScript实现定义的方式把自身转换成原始数值。
- 其他的数值组合是不相等的。
分享到:
相关推荐
在JavaScript编程语言中,相等运算符(`==`)与等同运算符(`===`)是两个非常重要的概念,它们用于判断两个值是否相等,但它们的比较方式和逻辑有所不同,这一点对于理解JavaScript的数据类型转换和比较规则至关...
在JavaScript中,相等运算符(==)和等同运算符(===)是两种用于比较变量之间是否相等的关键字,它们在判断条件时有着不同的规则和行为。 **相等运算符(==)** 相等运算符(==)在进行比较时会尝试进行类型转换,...
==运算符,这两个不相等运算符的运算结果是==和===运算结果的相反值。 严格相等运算符 严格相等运算符在对操作数进对比运算时,是不进行类型转换的。对比规则如下: 1. 操作数类型不同 对比结果是false 1 === ...
JavaScript 等号运算符是 JavaScript 编程语言中的一种基本运算符,用于比较两个操作数是否相等。在 JavaScript 中,等号运算符使用双等号(==)表示,当且仅当两个操作数相等时,它返回 true。本文将详细介绍 ...
在深入探讨JavaScript中的...通过以上详细解析,我们可以看到JavaScript中的运算符非常强大和灵活,能够满足各种计算需求,是构建复杂逻辑和算法的基础。掌握这些运算符对于任何JavaScript开发者来说都是至关重要的。
运算符和语句是JavaScript编程的基础,它们控制程序的执行流程和数据处理。本文将深入探讨这些知识点,并结合提供的压缩包文件中的练习案例进行讲解。 首先,让我们了解JavaScript中的运算符。运算符用于对变量或值...
在JavaScript中,“==”和“===”是用来比较变量之间相等性的运算符,它们之间的主要区别在于类型转换和比较的严格性。 “==”(等同)运算符在比较时,如果两边的值类型不同,会尝试进行类型转换后再进行比较。...
相等运算符`==`在比较时,会尝试将两边的值转换为相同的类型后再进行比较。例如,`"1" == 1`返回`true`,因为在比较之前,字符串"1"被转换成了数字1。 4. **不相等运算符(!=)**: 不相等运算符`!=`则检查两个值...
总结来说,在JavaScript中,理解假值和避免使用相等运算符(==)是非常重要的,因为这可以帮助开发者写出更为清晰、可预测和健壮的代码。全等运算符(===)的使用可以避免类型转换带来的潜在问题,而使用`isNaN()`...
严格相等运算符(===)则不进行任何类型转换,只有当两个值的类型和值都完全相同才会返回true。例如: ```javascript 0 === "" // false,类型不同 true === 1 // false,类型不同 ``` 严格相等运算符的使用可以...
3. **相等和等同运算符**: - `==`:相等运算符,比较宽松,会尝试进行类型转换后再比较。 - `===`:等同运算符,严格比较,要求两边类型和值都相同。例如,`"abc"=="abc"`和`"abc"==="abc"`都返回`true`,但`1==...
在JavaScript编程语言中,运算符和语句是构建程序逻辑的基础元素。本章将深入探讨JavaScript中的各种运算符和语句,帮助你更好地理解和运用这些关键概念。 首先,我们来看看JavaScript中的运算符。运算符是编程语言...
首先,`==` 运算符被称为宽松相等运算符。它在比较时会尝试进行类型转换,以便将两个操作数转换为相同的类型后再进行比较。这意味着如果两个值在转换后相等,`==` 就会返回 `true`。例如: ```javascript 0 == "" /...
JavaScript运算符是编程语言中不可或缺的部分,它们用于执行各种计算和逻辑判断,是编写JavaScript代码的基础。本文将详细解析JavaScript中的主要运算符。 1. **算数运算符**: - `+`:加法运算符,可用于数字的...
==` (严格不等):这些严格相等运算符不仅检查值,还检查数据类型是否相同。只有当值和类型都相同时,`===`才会返回`true`。 在进行关系运算时,如果运算符两边的值类型不一致,JavaScript会尝试进行类型转换,以便...
双等号“==”是JavaScript中的相等运算符,它用于比较两个值是否在逻辑上相等,但可能会发生类型转换。当使用“==”运算符比较两个不同类型的值时,JavaScript会尝试进行类型转换,以便将一个值转换为另一个值的类型...