jstl判断字符串相等(js中怎么比较两个字符串是否相等)
jstl判断字符串相等(js中怎么比较两个字符串是否相等),本文通过数据整理汇集了jstl判断字符串相等(js中怎么比较两个字符串是否相等)相关信息,下面一起看看。
ES2015中有四种等式算法:
抽象相等比较(==)严格相等比较(===):用于Array.prototype.indexOf,
Array.prototype.lastIndexOf,值与大小写匹配相同,为零:用于%TypedArray%和ArrayBuffer构造函数,以及Map和Set操作,将用于ES2016/ES7中的String.prototype.includes,值相同:用于所有其他地方。
JavaScript提供了三种不同的值比较操作:
严格相等( 三倍等于 或者 身份 ),使用==,松散相等( 双倍等于 ),使用==和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 # s替代原则。)当你试图修改一个不可变的属性时会发生什么:
当Object.defineProperty试图修改一个不可变的属性时,如果该属性确实被修改了,它将抛出一个异常,否则什么都不会发生。例如,如果v为-0,则没有任何变化,因此不会引发异常。但是如果v是0,就会抛出异常。使用相同值等式将不可变属性与新设置的值进行比较。相等的值由Object.is方法提供。
类似于equal value,但0和-0被视为相等。
在ES2015之前,你可能会说双一流和三等是 扩展 关系。比如有人会说double类是第三类的扩展版,因为它处理的是第三类做的事情,进行类型转换。比如6== 6 。相反,别人可能会说第三个类是第二个类的扩展,因为他也要求两个参数是同类型的,增加了更多的限制。怎么理解取决于你怎么看问题。
但是,这种比较可以不要将ES2015的对象. is放入其中。因为Object.is不比双类宽松,也不比三类严格,当然也不在其中。从下表可以看出,这是由于Object.is处理NaN的不同,注意,如果Object.is(NaN,NaN)计算为false,我们可以说它比三类更严格,因为它可以区分-0和0。但是对南的治疗表明这是错误的。Object.is应该被认为是有其特殊目的的,不应该说它比别人更宽松或更严格。
更多jstl判断字符串相等(js中怎么比较两个字符串是否相等)相关信息请关注本站。