Heim  >  Artikel  >  Web-Frontend  >  So ermitteln Sie, ob Variablen in Javascript gleich sind

So ermitteln Sie, ob Variablen in Javascript gleich sind

青灯夜游
青灯夜游Original
2021-04-19 11:00:073449Durchsuche

Beurteilungsmethode: 1. Verwenden Sie den Gleichheitsoperator „==“ oder „===“; 2. Verwenden Sie die Methode „Object.is()“; Verwenden Sie „JSON.stringify()“, um das Objekt oder Array in den String-Typ umzuwandeln, und verwenden Sie dann „===“ für den Gleichheitsvergleich.

So ermitteln Sie, ob Variablen in Javascript gleich sind

Die Betriebsumgebung dieses Tutorials: Windows 7-System, ECMAScript Version 6, Dell G3-Computer.

So beurteilen Sie, ob Variablen gleich sind

Um zu beurteilen, ob Variablen gleich sind, gibt es ungefähr die folgenden Möglichkeiten:

  • == und ===;
  • == 以及 ===
  • 利用数组中的toString方法;
  • ES6中的Object.is方法;
  • 利用JSON.stringify,转换为String类型来比较;

=====

==为转换类型比较运算符,===为严格比较运算符,在数据类型相同的情况下,使用==一般不会造成问题。

let num = 5;
let num2 = 5;

num == num2;//true
num === num2;//true

但在数据类型不一致的情况下,==会做一些隐性的类型转换。

let num = 5;
let str = '5';

num == str;//true
num === str;//false

'' == false;//true
'' === false;//false

null == undefined;//true
null === undefined;//false

隐性转换类型可以带来一些便利性,但也有可能造成不易发现的bug,所以还是更推荐使用===来进行比较,这也是TS之所以流行的原因之一。

此外,上面列举的都是基本数据类型的比较,而在用===比较引用类型时,会存在一定的局限性。

let a = {xx: 1};
let b = a;

a === b;//true

let c = {xx: 1};
let d = {xx: 1};

c === d;//false

在比较引用类型时,===比较的是变量的引用是否相同,而非值,当引用不同时,就会返回false

由此可见,===并不是一枚无往不利的银弹,在比较对象是否相等时,还需要借助其他更可靠的方法。

【推荐学习:javascript高级教程

Array toString方法

前端给后端传参时,后端有时会要求多个参数,隔开,Array toString方法就比较有用了,这一方法也能用作数组比较。

let arr = [1,3,5,7,9];
let arr2 = [1,3,5,7,9];

arr.toString() === arr2.toString();//true "1,3,5,7,9"

不过也存在一定的局限性,不能用来比较二维及以上的数组、不能包含nullundefinedobjectfunction等,否则容易出错,如下

[1,3,5,[2,4,6]].toString();//"1,3,5,2,4,6"
[1,null,undefined,'',2].toString();//"1,,,,2"
[{xx:2},window,1,2].toString();//"[object Object],[object Window],1,2"

Object.is方法

Object.is是ES6中新增的方法,与===非常类似,同样用作比较两个值是否相等。

Object.is(1,1);//true
Object.is('str','str');//true
Object.is({},{});//false

不同的是在判断+0-0NaNNaN时的区别。

+0 === -0 //true
NaN === NaN //false

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

在处理兼容性问题时,polyfill可以这么写。

if (!Object.is) {
  Object.is = function(x, y) {
    if (x === y) {
      // 针对+0 不等于 -0的情况
      return x !== 0 || 1 / x === 1 / y;
    } else {
     // 针对NaN的情况
      return x !== x && y !== y;
    }
  };
}

JSON.stringify

JSON.stringify方法用于把对象或者数组转换为一个 JSON字符串,得出的字符串便可以用作对象的比较。

let obj = {name: 'lin', age: 24};
let obj2 = {name: 'lin', age: 24};

obj === obj2;//false
JSON.stringify(obj) === JSON.stringify(obj2);//true

JSON.stringify弥补了===无法准确比较对象的局限,不过它也有一定的局限性,在遇到undefinedfunction以及symbol值时会忽略。

另外,值得一提的是利用JSON.parseJSON.stringify可实现对象深拷贝,局限性同上。

何时使用它们

不一样的场景可能有不一样的需求,如果只比较基本数据类型,那么===就足够了,如果想“一劳永逸Verwenden Sie die toString-Methode im Array

Object.is-Methode; li>

Verwenden SieJSON.stringify und konvertieren Sie ihn zum Vergleich in den Typ String;

== und ===

🎜== sind Konvertierungstyp-Vergleichsoperatoren und === code> ist ein strikter Vergleichsoperator. Wenn die Datentypen gleich sind, verursacht die Verwendung von <code>== im Allgemeinen keine Probleme. 🎜rrreee🎜Aber wenn die Datentypen inkonsistent sind, führt == einige implizite Typkonvertierungen durch. 🎜rrreee🎜Der implizite Konvertierungstyp kann eine gewisse Bequemlichkeit bringen, kann aber auch zu Fehlern führen, die nicht leicht zu finden sind. Daher wird zum Vergleich eher die Verwendung von === empfohlen Dies ist auch einer der Gründe, warum TS beliebt ist. 🎜🎜Darüber hinaus handelt es sich bei den obigen Listen ausschließlich um Vergleiche grundlegender Datentypen. Bei der Verwendung von === zum Vergleichen von Referenztypen gelten bestimmte Einschränkungen. 🎜rrreee🎜Beim Vergleich von Referenztypen vergleicht ===, ob die Referenz der Variablen gleich ist, und nicht der Wert, wenn die Referenz unterschiedlich ist, wird als false zurückgegeben. 🎜🎜Es ist ersichtlich, dass === kein unbesiegbares Allheilmittel ist. Beim Vergleich, ob Objekte gleich sind, sind andere, zuverlässigere Methoden erforderlich. 🎜🎜【Empfohlenes Lernen: Javascript-Tutorial für Fortgeschrittene🎜]🎜🎜🎜Array toString-Methode🎜🎜🎜🎜Wenn das Front-End Parameter an das Back-End übergibt, benötigt das Back-End manchmal mehrere Parameter, die durch ,, Array toStringgetrennt sind > Methode Es ist nützlicher, diese Methode auch für den Array-Vergleich zu verwenden. 🎜rrreee🎜Es gibt jedoch bestimmte Einschränkungen. Es kann nicht zum Vergleichen von Arrays mit zwei Dimensionen und höher verwendet werden und es darf keine null, undefinierten und Objekte enthalten , function usw., sonst ist es leicht, Fehler zu machen, wie folgt🎜rrreee🎜🎜Object.is-Methode🎜🎜 🎜🎜Object.is ist eine neue Methode in ES6. Sie ist === sehr ähnlich und wird auch verwendet, um zu vergleichen, ob zwei Werte gleich sind. 🎜rrreee🎜Der Unterschied besteht in der Beurteilung von +0 und -0, NaN und NaN. 🎜rrreee🎜Bei Kompatibilitätsproblemen kann Polyfill so geschrieben werden. 🎜rrreee🎜🎜JSON.stringify🎜🎜🎜🎜JSON.stringify-Methode wird verwendet, um ein Objekt oder Array in einen JSON-String zu konvertieren, was zu … Für den Objektvergleich können Zeichenfolgen verwendet werden. 🎜rrreee🎜JSON.stringify gleicht die Einschränkung aus, dass === Objekte nicht genau vergleichen kann, weist aber auch bestimmte Einschränkungen auf, wenn undefiniertauftritt >-, function- und symbol-Werte werden ignoriert. 🎜🎜Darüber hinaus ist es erwähnenswert, dass mit JSON.parse und JSON.stringify eine objekttiefe Kopie realisiert werden kann, mit den gleichen Einschränkungen wie oben. 🎜🎜🎜Wann man sie verwendet 🎜🎜🎜🎜Verschiedene Szenarien können unterschiedliche Anforderungen haben, wenn nur grundlegende Datentypen verglichen werden, dann === Wenn Sie „<code>ein für alle Mal“ möchten, ist es zweifellos notwendig, eine benutzerdefinierte Methode zu einem bestimmten Preis zu verwenden. 🎜🎜In der täglich wiederholten Entwicklung müssen Sie noch mehr erforschen. 🎜🎜Weitere Kenntnisse zum Thema Programmierung finden Sie unter: 🎜Programmiervideos🎜! ! 🎜

Das obige ist der detaillierte Inhalt vonSo ermitteln Sie, ob Variablen in Javascript gleich sind. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn