JavaScript具有严格和类型转换相等性比较。为了strict相等,要比较的对象必须具有相同的类型,并且:
创新互联建站是一家专注于成都做网站、成都网站建设与策划设计,疏勒网站建设哪家好?创新互联建站做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:疏勒等地区。疏勒做网站价格咨询:18980820575
当两个字符串在相同位置具有相同的字符序列,相同的长度和相同的字符时,它们是严格相等的。
当两个数字在数值上相等时(具有相同的数值)严格相等。NaN不等于,包括NaN。正零和负零彼此相等。
如果两个布尔操作数都为true或均为false,则它们严格相等。
如果两个对象引用相同,则它们严格相等Object。
* Null和Undefined类型是==(但不是===)。[即(Null==Undefined)是,true但(Null===Undefined)是false]
意思是当鼠标指向控件时该控件获得焦点,而获得焦点时使控件中的文本被选中。===表示类型什么的全部相等,!==表示要全部不想等包括类型或者的意思。
||‘或’两边只要有一个为真的时候表达式就为真。
!‘非’非后面的为真表达式就为假后面为假的表达式就是真的,就是相反的意思。
!!一般用来将后面的表达式转换为布尔型的数据(boolean),因为javascript是弱类型的语言(变量没有固定的数据类型)所以有时需要强制转换为相应的类型。
与|的关系
在Java中||和|都是逻辑或运算符,两种逻辑或(||和|)的运算规则也基本相同。
|运算是把逻辑表达式全部计算完,而||运算具有短路计算功能。
对于|来说,如果左侧条件为true,也会计算右侧条件的值,而对于||来说,如果左侧的条件为true,则不计算右侧的条件,这种现象被称作短路现象。所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。
以上内容参考:百度百科-||
"==="叫做严格运算符,"=="叫做相等运算符。
严格运算符的运算规则如下,
(1)不同类型值
如果两个值的类型不同,直接返回false。
(2)同一类的原始类型值
同一类型的原始类型的值(数值、字符串、布尔值)比较时,值相同就返回true,值不同就返回false。
(3)同一类的复合类型值
两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。
(4)undefined和null
undefined 和 null 与自身严格相等。
null === null //trueundefined === undefined //true
相等运算符在比较相同类型的数据时,与严格相等运算符完全一样。
简单来说,==在比较的时候,会发生数据类型转换,而===不会发生类型转换,也就是说,对于===的话,会先判断是否是同一个类型,如果不是的话,直接返回false,而==的话呢,如果不是同一个类型,则会先根据一些规则,把他们转换成同种类型的,然后再进行比较。
对于==的话,究竟都是根据哪些规则来转换的呢?
如果相比较的两个操作数,其中一个是数字类型,另一个是字符串类型的话,那么字符串将会转换为数字,再进行比较
也就是说
"1111" == 1111 等价于 Number("1111") == 1111
如果操作数中,有布尔类型的,那么他将会转为数字类型
也就是说, true == 12 等价于 Number(true) == 12,所以结果为false
如果比较的两个操作数,一个是undefined另一种是null,则返回true
undefined == null 的值为true
对于两个操作数,如果其中一个是字符串或数字,另一个是对象的话,那么对象会转为原始值,然后再进行比较
那么对象怎么转换呢?
通常来说,再转换的时候,会先判断对象中是否有valueOf()函数,有的话,就执行这个,获取到原始值,如果通过valueOf()函数获取不到原始值,或者这个函数不存在的话,就调用toString()函数。
看下面这个例子
var obj = {
valueOf() {
return 3;
}
}
console.log(obj == 3); // true
如果想了解更多关于==之间类型转换之间的小知识,可以参考小文章来获取更多内容:Javascript基础之-强制类型转换(三)
我在开发者窗口测试了一下,发现x==="123"的结果是false,你的是怎么来的?
也许你的var x=123的下面还有其他语句,然后x被自动转换为string型了,所以x与"123"的严格比较结果为true了