js中==、===和Object.is()的区别

1. == :等于,两边值类型不同的时候,先进行类型转换,再比较;

2. === :严格等于,只有当类型和值都相等时,才相等;

3. Object.is() :与 === 的作用基本一样,但有些许不同。

== 和 === 的区别

== 和 === 的最大区别就是前者不限定类型而后者限定类型。如下例,如果想要实现严格相等(===),两者类型必须相同。

1 == "1";     // true
1 === "1";    // false

0 == false;   // true
0 === false;  // false

对于严格相等,有以下规则,如果  x === y,那么:

  a、如果x的类型和y的类型不一样,返回false;

  b、如果x的类型是数字,那么:

    (1):如果x是NaN,返回false;

    (2):如果y是NaN,返回false;

    (3):如果x和y是同一个数字值,返回true;

    (4):如果x是+0,y是-0,返回true;

    (5):如果x是-0,y是+0,返回true;

    (6):其余返回false。

  c、如果x和y的类型都为undefined或者null,返回true;

  d、如果x和y的类型都为字符串类型,那么如果x和y是完全相同的字符编码序列,返回true,否则返回false;

  e、如果x和y的类型都为布尔类型,那么如果x和y同为true或者false,返回true,否则返回false;

  f、如果x和y是同一个对象值,返回true,否则返回false。

=== 和 Object.is() 的区别

Object.is() 的行为与 === 基本一致,但有两处不同:

  a、+0 不等于 -0;

  b、NaN 等于自身。

+0 === -0;           // true
Object.is(+0, -0)    // false

NaN === NaN          // false
Object.is(NaN, NaN)  // true

三者的详细对比表如下图所示:

原文地址:https://www.cnblogs.com/zzh0318/p/12046530.html

时间: 2024-10-15 02:23:26

js中==、===和Object.is()的区别的相关文章

JS中isPrototypeOf 和hasOwnProperty 的区别 ------- js使用in和hasOwnProperty获取对象属性的区别

JS中isPrototypeOf 和hasOwnProperty 的区别 1.isPrototypeOf isPrototypeOf是用来判断指定对象object1是否存在于另一个对象object2的原型链中,是则返回true,否则返回false. 格式如下: object1.isPrototypeOf(object2); object1是一个对象的实例: object2是另一个将要检查其原型链的对象. 原型链可以用来在同一个对象类型的不同实例之间共享功能. 如果 object2 的原型链中包含

浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

var num = 1;    var str = '1';    var test = 1;    test == num  //true 相同类型 相同值    test === num //true 相同类型 相同值    test !== num //false test与num类型相同,其值也相同, 非运算肯定是false    num == str  //true 把str转换为数字,检查其是否相等.    num != str  //false == 的 非运算    num ==

JS中深拷贝与浅拷贝的区别,实现深拷贝的几种方法

JS中深拷贝与浅拷贝的区别,实现深拷贝的几种方法 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力. 此篇文章中也会简单阐述到栈堆,基本数据类型与引用数据类型,因为这些概念能更好的让你理解深拷贝与浅拷贝. 我们来举个浅拷贝例子: let a=[0,1,2,3,4], b=a; console.log(a===b); a[0]=1; console.log(a,b); 嗯?明明b复

Angular.js 中 copy 赋值与 = 赋值 区别

转自st.gg Angular.js 中 copy 赋值与 = 赋值 区别 为什么用 $scope.user = $scope.master; $scope.master 会跟着 $scope.user 改变?angular.copy 和 = 号赋值有什么区别呢?新手还没有搞懂,请教各位了. <!DOCTYPE html> <html> <script src= "http://apps.bdimg.com/libs/angular.js/1.3.9/angular

js中的Object

js中的Object 浅克隆 var obj = { a: 1, b: 2, c: 3 } 方式一: var o = Object.assign({}, obj); 方式二: var {...o} = obj; 深克隆 JSON.parse(JSON.stringify(obj)) freeze 浅冻结,属性值不能修改,但是嵌套的引用类型不起作用 Object.freeze(obj); obj.a = 11 // 修改属性无效 seal 密封对象,不能添加和删除属性 Object.seal(ob

js中import和require的区别

js中import和require的区别ES6标准发布后,module成为标准,标准使用是以export指令导出接口,以import引入模块.但是在我们一贯的node模块中,我们依然采用的是CommonJS规范,使用require引入模块,使用module.exports导出接口. require它相当于module.exports的传送门,module.exports后面的内容是什么,require的结果就是什么,对象.数字.字符串.函数……再把require的结果赋值给某个变量,相当于把re

js中typeof和instanceof用法区别

typeof和instanceof的区别 typeof和instanceof都可以用来判断变量,它们的用法有很大区别: typeof会返回一个变量的基本类型,只有以下几种:number,boolean,string,object,undefined,function:例: alert(typeof(1));//number alert(typeof("abc"));//string alert(typeof(true));//boolean alert(typeof(m));//und

JS中typeof与instanceof的区别 (2010-05-26 10:47:40

JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: typeof typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型. 它返回值是一个字符串,该字符串说明运算数的类型.typeof 一般只能返回如下几个结果: number,boolean,string,function,object,undefined.我们可以使用 typeof 来获取一个变量是否存在,如 if(typeof a!="un

JS中typeof与instanceof的区别

JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: typeof typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型. 它返回值是一个字符串,该字符串说明运算数的类型.typeof 一般只能返回如下几个结果: number,boolean,string,function,object,undefined.我们可以使用 typeof 来获取一个变量是否存在,如 if(typeof a!="un

[转]html js中name和id的区别和使用分析

js中web页面元素的调用可以有两种识别方法:id和name 自己在用的过程中总结一下id和name的使用区别. 一,使用范围 除 BASE, HEAD, HTML, META, SCRIPT, STYLE, TITLE 标签外,id 都可用. name只用于APPLET,SELECT,FORM,FRAME,IFRAME,IMG,A,INPUT,OBJECT,MAP,PARAM,META. (name有时有自己的用途) name 用于 form 内元素,提交需要 id 用于 form 外元素好用