js中==, !==, === ,!=的区别

在讨论比较符的时候我们先要来讨论哈js的类型,这样有助于我们从本质上了解原理。

下面是我找的资料加上个人的总结:

js中有5种数据类型:UndefinedNullBooleanNumberString

还有一种复杂的数据类型Object,Object本质是一组无序的名值对组成的。

JS里不区分整型和浮点型,

new function(),它不再是函数,而是一个JS对象,数组在JS里也被认为是对象,JSON当然也是对象,我们一般用{}扩起来,

依次来表示它是一个JSON对象,几个JSON对象组件的集合叫做JSON数组,也是使用[]括起,它和普通数组没什么区别,只是元素的类型不同而已。

Undefined类型只有一个值,即undefined,使用var声明变量,但是未对初始化的,这个变量就是Undefined类型的,例子:
var i;
alert(i == undefined);//true

var i;与var i = 
undefined;这两句是等价的。
包含Undefined值的变量和未定义的变量是不一样的。

undefined通过==类型转化后会变成false。

即var m;

alert(!m);//true

Null类型也只有一个值:null.null表示一个空对象的指针。

var s=null;

alert(!s);//true

Boolean类型:只有两个字面量true和false。但是js中多有的变量都可以使用Boolean()函数转换成一个Boolean类型的值。

这个就没什么好说的了。

Number类型:整数和浮点数。

NaN:Not a Number。这个数值用于本来要返回一个数值,但是却未能放回一个数值的情况,以防止报错。
例如:1/0 
返回的就是NaN。NaN的特点:1、任何涉及NaN的操作都会返回NaN。2、NaN对任何值都不相等,包括自己NaN本身。
针对NaN特性,JS内置了isNaN()函数,来确定数值是不是NaN类型。

现在在ts(完全兼容js)

如果你申明变量

var s=1/0;  //infinity(无穷大)

alert(!s);//false

String 类型:

 这个我就不讲了,没意思!

最后再说一个typeof操作符:对一个变量进行推断变量的类型

用法:typeof 95; 或者 typeof(95); 会返回"number".

好了我们在进入正题

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 === str  //false  类型不同,直接返回false
num !== str  //true   num 与 str类型不同 意味着其两者不等 非运算自然是true哟
看了注释肯定一目了然了吧,就是这么easy!
原文地址:https://www.cnblogs.com/HKKD/p/4936101.html