威尼斯wns.9778官网活动_vnsc威尼斯城官网

热门关键词: 威尼斯wns.9778官网活动,vnsc威尼斯城官网
当前位置:威尼斯wns.9778官网活动 > 计算机教程 > 最近一直在笔试面试,经常碰到例如 123

最近一直在笔试面试,经常碰到例如 123

文章作者:计算机教程 上传时间:2019-05-10

x==5;

最近一直在笔试面试,经常碰到例如 123=='123'、'abc'==true等问题,其中有答对的,也有答错的,主要原因还是对ECMAScript的规范没有理解清楚,很多题目没有具体分析所导致。现查阅资料后对此进行一些总结。

== 等于 x==8 为 false
=== 全等(值和类型) x===5 为 true;x==="5" 为 false
!= 不等于 x!=8 为 true
> 大于 x>8 为 false
< 小于 x<8 为 true
>= 大于或等于 x>=8 为 false
<= 小于或等于 x<=8 为 true

 

若两值比较是否相等,a==b;两值可能不是同一类型,==会进行默认的数据类型转换,规则如下:

等性操作符(==)

    1.一个操作数是布尔值,则比较之前将其转换为数值(0或者1);

 

    2.一个操作数是字符串,则比较之前将其转换成为数值在比较;

1、比较的类型是String、Number、Boolean这几个基本类型时

    纯字符串比较,转换成ASCII码在进行比较;

 

    纯数字和数字字符串相比较,则将字符串数字隐式转换成数字再进行比较;

当是这几中类型进行比较时,会先将两边转换成数字,在进行比较。

    纯数字和非数字字符串比较,都返回false;

 

    3.一个操作数是对象,则先调用valueOf()或者toString()方法后在用返回值比较;

复制代码

    一个操作数是对象,则会先调用valueOf()或toString()方法后再用返回值比较。

1 console.log(1 == true); // true转换成数字为1,因此结果为true

    var a = {toString:function(){
      return 1;
    }},b=1;
    console.log(a==b)      // true

  

3 console.log('123' == 123); //true

    对象 == 对象        //false,比较的是他们的地址,每个新创建对象的引用地址都不同

    var a = {b:1},h=a; console.log(a==h)       //true,引用地址一样

5 console.log('abc' == true); //'abc'转换成数字为NaN,结果为false,ECMAScript规定,NaN与任何值比较都是false,包括NaN==NaN

    var a = {b:1},b={b:1};  console.log(a==b)          //false

两个操作数都是对象,则比较他们是否是同一个对象,如果都指向同一个对象,则返回true,否则返回false;

复制代码

    4、不需要任何转换的情况下,null和undefined是相等的;

2、上述基本类型与引用类型比较时

    5、任何涉及NaN的操作(NaN/10)都会返回NaN;NaN与任何值都不相等,包括它本身

 

    6、在全等和不全等的判断上,比如值和类型都相等才返回true,否则返回false;

首先会调用对象的valueOf()方法,期待返回一个基本类型的值(测试为若返回Boolean、Number、String、null、undefined或没有返回值,则将不会继续调用toString方法),若返回的仍然是一个复合对象的话,则调用其toString()方法,若仍然没有返回上述基本类型的话,则直接判为不相等。

   

 

  

复制代码

 

1 var obj = {};

若只有一个值,判断真假时,只有(NaN,‘ ’,0,null,undefined)这五个为false,其余均为true;

2 console.log(obj == '1') //obj.valueOf()返回这个对象,因此接着调用obj.toString()返回'[object Object]'字符串,按基本类型的比较方式,都转换成数字,发现不相等,因此结果是false

    ! :取反     ,  !!:将其他数据类型转化为布尔类型。

3 //重写obj的toString方法

console.log(!'0');              //false

4 obj.toString() = function(){

console.log(!0);                //true

5     return 1;

console.log(!!'1');             //true

6 }

console.log(!!0);              //false

7 console.log(obj == '1'); //结果就为true了

console.log(!!true);         //true

8 console.log(obj == true); //结果也为true

console.log(!!'false');     //true

复制代码

 

复制代码

在关系运算中,‘ ’可以自动转换为0或者false;

 1 var obj = {

  null==0    //false,null自动转换为0,但在比较运算上,null和undefined没有自动转换(null!=0)

 2     valueOf : function(){

   ‘’==0    //true,''字符串在比较的时候,会自动转换

 3         console.log('first');

console.log(isNaN('1'));                    //false

 4     },

isNaN() 函数用于检查其参数是否是非数字值。如果参数值为 NaN 或字符串、对象、undefined等非数字值则返回 true, 否则返回 false。能自动转化为数字的isNaN()都返回false;

 5     toString : function(){

 

 6         console.log('second');

 7     }

 8 }

 9 console.log(obj == 1); //结果为 first false

10 

11 var obj = {

12     valueOf : function(){

13         console.log('first');

14         return null; //或者return undefined

15     },

16     toString : function(){

17         console.log('second');

18     }

19 }

20 console.log(obj == 1); //结果为 first false

21 

22 var obj = {

23     valueOf : function(){

24         console.log('first');

25         return {}; //或者return其他复合对象

26     },

27     toString : function(){

28         console.log('second');

29     }

30 }

31 console.log(obj == 1); //结果为 first second false

复制代码

 

 

对于undefined和null,ECMAScript规定null==undefined结果为true;在比较等性之前,不能将null和undefined转换成其他值。

 

1 console.log(null == undefined); //true

2 console.log(null == 0); //false

3 console.log(0 == undefined); //false

3、两个对象比较

 

本文由威尼斯wns.9778官网活动发布于计算机教程,转载请注明出处:最近一直在笔试面试,经常碰到例如 123

关键词: