ECMAScript运算符之《等性运算符》

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ECMAScript运算符之《等性运算符》相关的知识,希望对你有一定的参考价值。

等性运算符一般用在判断两个变量是否相等的运算。在处理原始值时,这种运算相当简单,涉及对象,任务就稍有点复杂。

性运算符分:

1、等号和非等号用于处理原始值

2、全等号和非全等号用于处理对象

一、等号和非等号(比较值)
在 ECMAScript 中,

1、等号由双等号(==)表示,当且仅当两个运算数相等时,它返回 true。

2、非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。

执行类型转换的规则如下:

1、如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1

2、如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字

3、如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串

4、如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字

来点栗子说事儿:

一、如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1

console.log(false == 0);//true
console.log(true == 1);//true
console.log(false == 1);//false
console.log(true == 0);//false
console.log(false != 0);//false
console.log(true != 1);//false
console.log(false != 1);//true
console.log(true != 0);//true

二、如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字

console.log("12" == 12);//true
console.log("12" != 12);//false

三、如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串

var obj = [‘a‘]
var str = "a"
console.log(obj.toString());//a -> 转换为字符串之后变成a
console.log(obj == str);//true
console.log(obj != str);//fasle

四、如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字

var obj = [‘12‘]
var Num = 12;
console.log(Number(obj));//12 -> 转换为数字之后变成12
console.log(obj == Num);//true

在比较时,该运算符还遵守下列规则:

1、值 null 和 undefined 相等

2、在检查相等性时,不能把 null 和 undefined 转换成其他值

3、如果某个运算数是 NaN,等号将返回 false,非等号将返回 true

4、如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等

我们的好朋友,栗子同志来了:

一、值 null 和 undefined 相等

var a = ‘‘;
console.log(a.innerhtml);//undefined
console.log(null == a.innerHTML);//true
console.log(null != a.innerHTML);//fasle

二、在检查相等性时,不能把 null 和 undefined 转换成其他值

这个就理解字面意思就行了,我不知道怎么给你们找例子了,CGL对不起大家了。

三、如果某个运算数是 NaN,等号将返回 false,非等号将返回 true

console.log(NaN == null);//false
console.log(NaN == undefined);//false
console.log(NaN == NaN);//false
console.log(NaN == 0);//false
console.log(NaN != 0);//true

四、如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等

例子有点不切当,大家将就看看吧,大概意思是这样的。

var fn1 = function()console.log(‘我是fn1‘);
var fn2 = fn1
var fn3 = function()fn1()function() //跟单:www.gendan5.com

fn1()
fn2()
fn3()
console.log(fn1 == fn2);
console.log(fn2 == fn3);

var fn4 = [1,2,3];
var fn5 = [1,2,3];
console.log(fn4 == fn5);

二、全等号和非全等号(比较值和类型)
等号和非等号的同类运算符是全等号和非全等号。这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换。

1、全等号由三个等号表示(===),只有在无需类型转换运算数就相等的情况下,才返回 true。

2、非全等号由感叹号加两个等号(!==)表示,只有在无需类型转换运算数不相等的情况下,才返回 true。

var num1 = 30;
var num2 = 30;
var str = "30";

console.log(num1 === num2);//true -> 值一样,类型都是数字
console.log(num1 === str);//false -> 值一样,类型是数字和字符串
console.log(NaN === NaN);//false -> 直接false,硬记
console.log(num1 != str);//false -> 类型不一样,但是值一样
console.log(NaN != NaN);//true -> 直接true,硬记
console.log(NaN !== NaN);//true -> 直接true,硬记
console.log(num1 !== num2);//false -> 值和类型都一样

其他的看《等号和非等号》就可以。

以上是关于ECMAScript运算符之《等性运算符》的主要内容,如果未能解决你的问题,请参考以下文章

前端基础之JavaScript_1

js初识

ES6学习笔记

ECMAScript运算符之《四则运算符 – 加性运算符》

ECMAScript的操作符之《赋值操作符》

2016年3月7日----Javascript的运算符