js中判断字符串相等的函数 判断两串字符串相等的方法

ES2015中有四种等式算法:抽象相等比较 (==)严格相等比较 (===): 用于 Array.prototype.indexOf,Array.prototype.lastIndexOf, 和 case-***tching同值零: 用于 %TypedArray% 和 ArrayBuffer 构造函数、以及Map和Set操作, 并将用于 ES2016/ES7 中的String.prototype.includes同...

ES2015中有四种等式算法:

抽象相等比较 (==)严格相等比较 (===): 用于 Array.prototype.indexOf,

Array.prototype.lastIndexOf, 和 case-***tching同值零: 用于 %TypedArray% 和 ArrayBuffer 构造函数、以及Map和Set操作, 并将用于 ES2016/ES7 中的String.prototype.includes同值: 用于所有其他地方

JavaScript提供了三种不同的值比较操作:

严格相等 (“triple equals” 或 “identity”),使用 === ,宽松相等 (“double equals”) ,使用 ==以及 Object.is (ECMAScript 2015/ ES6 新特性)

使用哪种操作取决于您需要哪种比较。

简而言之,比较两个事物时,双等号会进行类型转换;三个等号会在没有类型转换的情况下做同样的比较(如果类型不一样,总是返回false);而Object.is的行为方式和三个等号一样,只是对NaN和-0和+0进行了特殊处理,所以后两者是不同的,Object.is(NaN,NaN)将为真。(通常用双等号或三等号比较NaN,结果是假的,因为IEEE 754是这么说的。)请注意,所有这些之间的差异与其处理原语有关;这三个运算符的原语都不会比较两个变量在结构和概念上是否相似。对于任意两个不同的非原始对象,即使它们的结构相同,上述三个运算符也会计算出false。

严格相等= = =

Equal运算符比较两个值是否相等,并且两个被比较的值在比较之前不会进行隐式转换。如果两个比较值的类型不同,则这两个值不全等。否则,如果两个比较的值类型相同,值相同,并且都不是数字类型,则两个值全等。最后,如果两个值都是number类型,则当它们不是NaN并且分别具有相同的值或+0和-0时,这两个值被认为是全等的。

在日常生活中使用同余运算符几乎总是正确的选择。对于数值以外的值,同余运算符使用显式语义进行比较:一个值只与其自身全等。对于数值,同余运算符使用稍微修改的语义来处理两种特殊情况:第一种情况是浮点数0既是正数也是负数。在解决一些具体的数学问题时,区分+0和-0是很有必要的,但大多数情况下我们不必在意。同余运算符认为这两个值是全等的。第二种情况,浮点数包含NaN值,用来表示一些定义不清的数学问题的解,比如正无穷大加负无穷大。全等运算符认为NaN与任何其他值都不全等,包括它本身。(方程式(x!== x)仅当x的值为NaN时为真)。

非严格等式

相等运算符比较两个值是否相等,并在比较之前将两个比较值转换为相同的类型。转换后(方程的一面或两面都可以转换),最终的比较方法与全等运算符= = =的比较方法是等价的。等式算子满***换律。

相等运算符比较不同类型的值,如下图所示:

上表中,ToNumber(A)试图在比较之前将参数A转换为数字,其效果与+A(一元运算符+)相同。尝试依次调用a的A.toString和A.valueOf方法,将参数a转换为原始值。

一般来说,根据ECMAScript规范,所有对象不等于未定义和空。但是,大多数浏览器只允许很窄的对象类别(即所有页面中的document.all对象),在某些情况下,这是未定义的一个例子。等号运算符就是在这样的背景下产生的。因此,is false(A)方法的值为true当且仅当A模仿undefined。在所有其他情况下,对象将不等于未定义或空。

一些开发人员认为最好不要使用等号运算符。同余运算符的结果更容易预测,而且由于没有隐式转换,同余比较运算会更快。

同等价值

等值解决了最后一个用例:确定两个值在任何情况下是否功能相同。(这个用例展示了Richter替代原则的一个例子。)当你试图修改一个不可变的属性时会发生什么:

当Object.defineProperty试图修改一个不可变的属性时,如果该属性确实被修改了,它将抛出一个异常,否则什么都不会发生。例如,如果v为-0,则没有任何变化,因此不会引发异常。但是如果v是+0,就会抛出异常。使用相同值等式将不可变属性与新设置的值进行比较。相等的值由Object.is方法提供。

同等价值

类似于equal value,但是+0被认为等于-0。

理解平等比较的模式

在ES2015之前,你可能会说双三等是& 展开&;的关系。比如有人会说double类是第三类的扩展版,因为它处理的是第三类做的事情,进行类型转换。比如6 = = “6”。相反,别人可能会说第三个类是第二个类的扩展,因为他也要求两个参数是同类型的,增加了更多的限制。怎么理解取决于你怎么看问题。

但是这种比较是无法把ES2015的Object.is排进去的。因为Object.is不比双类宽松,也不比三类严格,当然也不在其中。从下表可以看出,这是由于Object.is处理NaN的不同,注意,如果Object.is(NaN,NaN)计算为false,我们可以说它比三类更严格,因为它可以区分-0和+0。但是对南的治疗表明这是错误的。Object.is应该被认为是有其特殊目的的,不应该说它比别人更宽松或更严格。

本文来自微笑向暖投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/503748.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 04-14
下一篇 04-14

相关推荐

  • php时间代码 php变量和字符串拼接

    对于一门编程语言来说,对文件和目录的操作是其最基本的功能。我们日常生活中最常见的图片上传、文件上传等功能,都需要文件和目录操作的支持。今天我们先简单学习一下PHP中关于目录操作的一些类和函数。目录分隔符和路径分隔符我们先来看两个常量,分别是目录和路径的分隔符

    2023-07-27 01:02:01
    753 0
  • 前端js把json字符串转json对象 java对象转json对象命令

    最近在逛编程问题答案的时候看到了这个问题:如何将一个JSON数组类型的字符串转换成JSON数组,然后遍历数组取出JSON对象,最后在JS中取出它的属性。在这里,我想给同样有疑问的朋友们一些解答。当然,也欢迎大家在大神留言区留下更好的答案。首先我们回到源头问一下,JSON到底

    2023-07-19 04:55:01
    345 0
  • java生成随机字符串数组 java代码大全及详解

    Java语言规范、API、JDK和IDE的含义:Java语言规范是Java语法和语义的技术定义,API是应用程序接口(Java预定义的类和接口),Java开发工具包(JDK)包含软件库、编译器、解释器等工具,集成开发环境(IDE)提供编辑、编译、调试和在线帮助功能。Java平台版本:Java SE:允许开发和部

    2023-07-18 17:14:01
    711 0
  • c语言字符串定义 c语言字符和字符串区别

    想了解C语言中数组和指针的关系?这篇文章将占用你三分钟的时间。看完一定会有收获!排列将数组声明为数据类型名称[常量大小],并将数据类型的一个或多个实例分组到一个可寻址的位置。常量大小可以是一个表达式,但该表达式必须计算为常量,例如:#定义最大尺寸16…int l

    2023-07-07 07:51:01
    1004 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信