美文网首页IT修真院-前端
in,typeof,instanceof,===运算符分别是干什

in,typeof,instanceof,===运算符分别是干什

作者: LHongLi | 来源:发表于2018-01-02 10:31 被阅读8次

    大家好,我是IT修真院上海分院1期的Web学员刘洪利,今天给大家分享一下关于JavaScript中的in,typeof,instanceof,===运算符分别是干什么的


    目录

    1.背景介绍

    2.知识剖析

    3.常见问题

    4.解决方案

    5.编码实战

    6.扩展思考

    7.参考文献

    8.更多讨论


    1.背景介绍

    在JavaScript中,有很多常见的运算符来达成不同的效果,这次我们来看下其中的 in,typeof,instanceof,===这四种运算符可以达成的效果及何种情况下适用.


    2.知识剖析

    I. IN运算符号

            用来测试一个对象中是否存在一种属性。

    result= propertyinobject

            result 必需。任何变量。 

            property 必需。计算结果为字符串表达式的表达式。 

            object 必需。任意对象

        IN运算符在对象中的应用    

            varobj = {x:1,y:6};

            console.log('x'inobj)//true

            console.log('y'inobj)//true

            console.log('1'inobj)//false

        如果第二个运算数为对象,则in运算符用来检测第一个运算数是否是第二个运算数的属性名。如果对象中有属性值wei第一个运算数就返回true,否则返回false。

        IN运算符在数组中的应用

            vararr = [6,12,22,40];

            console.log(6inarr)//false,只可判断数组的键值

            console.log(12inarr)//false,只可判断数组的键值

            console.log(0inarr)//true

            如果第二个运算数为数组,则in运算符用来检测第一个运算数是否为数组包含的索引之一。在数组中,索引就代表了这个数组的属性。

        IN运算符在原型链中的应用

            Object.prototype.sayHello ='hello,world';

            var foo =newObject();

            console.log('sayHello'infoo);//true;

            console.log('toString'infoo);//true;

            console.log('hasOwnProperty'infoo);//true;

            in运算符会在整个原型链上查询给定的属性

    II. TYPEOF运算符号

    typeof用以获取一个变量或者表达式的类型,typeof一般只能返回如下几个结果:

                                            number(数字类型) 

                                            boolean(布尔值) 

                                            string(字符串) 

                                            function(函数) 

                                            object(NULL,数组,对象) 

                                            undefined(空)

            typeof123//number

            typeof'123'//string

            我们可以使用typeof来获取一个变量是否存在,如if(typeof a!=undefined){},而不要去使用if(a),因为如果a不存在(未声明)则会出错。但是typeof如果遇到null,数组,对象时,都会返回object类型。

    III. INSTANCEOF运算符号

            因为typeof遇到null,数组,对象时都会返回object类型,所以当我们要判断一个对象是否是数组时 或者判断某个变量是否是某个对象的实例则要选择使用另一个关键语法instanceof

            instanceof用于判断一个变量是否某个对象的实例,如var a=new Array();alert(a instanceof Array);会返回true, 同时alert(a instanceof Object)也会返回true;这是因为Array是object的子类。

            var a=newArray(); 

            console.log(ainstanceofArray);//true

            console.log(ainstanceofObject);//true

            再如:function test(){};var a=new test();alert(a instanceof test)会返回true。 

            function test(){};

            var a=new test();

            console.log(a instanceof test) //true

    IV. === 全等运算符号

            ===用于严格比较,判断两者严格相等,===严格比较,不会进行自动转换,要求进行比较的操作数必须类型也要保持一致,不一致时返回flase。

            console.log('55'===55);//false

            console.log('55'==55);//true


    3.常见问题

    == 和 === 的区别


    4.解决方案

    == 用于比较,判断两者相等 

    == 在比较的时候可以转自动换数据类型

    === 在之前也说过了,全等不会进行自动转换,所以两个比较数必须所有保持一致才会获得true

    不相等 != 和不全等 !== 与上面的相同,同样是不相等会自动转化类型,而不全等则不会

            console.log('55'==55);//true

            console.log('55'===55);//false

            console.log('55'!=55);//false,在转化类型后左右相等

            console.log('55'!==55);//true,因为不同的数据类型不相等


    5.扩展思考

    FOR...IN语句

    for...in 语句用于对数组或者对象的属性进行循环操作。 

    for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。 

    Tip: for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”。

    for(变量in对象) 

                              {

                                    在此执行代码

                                }


    7.参考文献

    参考一: jsvascript === 和==的区别

    参考二: in运算符(javascript)

    参考三: js中typeof与instanceof用法

    参考四: javascript中的for in循环和for循环的使用



    8.更多讨论

    Q1::全等可以比较对象么

    A1:全等可以用来比较对象,但是对象本身是无法进行比较的,只会得到false。如果像下面一样,我们声明对象a和对象b

    var a = {x:'1',y:'2'};

    var b = {x:'2',y:'1'};

    var c =  {x:'2',y:'1'};

    console.log(a === b);    //false,如果我们对比两个对象本身,是永远不会得到true

    console.log(b === c);    //false,即使这两个对象的属性及属性值完全相同,也不会得到true

    console.log(a.x === b.y);    //true,但是如果我们比较两个对象中的属性值时,全等会对对象属性的属性值进行比较

    Q2:==和===的区别

    A2:就像之前说的那样,== 的对比要模糊一点,特别是在数字类型和字符串类型上,如果我们比较字符串66和数字66,==会将左右两侧比较数的数据类型自动转化为相同类型在进行比较。我们也是可以通过==的这个特性来比较一些不太好判断类型的数值。

            ===就是==的严格版,===除了对比两侧操作数的值以外,还会对比两侧操作数的数据类型。如果我们知道两个操作数的数据类型,可以通过自己来转化在进行比较。如果没有比较的话,最好还是用===来进行比较,可以避免一些莫名其妙的错误。

            比如,当我们获取到url中传来的参数时,这时的参数是以String类型存在的,但是我们又需要url传来的参数进行比较结果在页面达成某些效果。这时,最优选择是将url传来的参数用parseInt方法进行转化,之后在用===来进行比较。

    Q3:for...in一般什么时候用

    A3:

            1.For...In 声明用于对数组或者对象的属性进行循环/迭代操作。

    对于数组 ,迭代出来的是数组元 素,对于对象 ,迭代出来的是对象的属性;

    var x  var mycars = new Array();

    mycars[0] = "Saab";

    mycars[1] = "Volvo"; 

    mycars[2] = "BMW";   

    for (x in mycars)  {      

            document.write(mycars[x] + "") ;

    } ;

    var obj = {      

            w: "wen",      

            j: "jian",      

            b: "bao"  }; 

    for(var v in obj){    

            document.write(v)+" ";    

    }  


                鸣谢

           感谢大家观看

          主讲人:刘洪利

       BY : 郭俊伟|刘洪利


    IT修真院上海Web第1期学员刘洪利: 邀请码14898047

    相关文章

      网友评论

        本文标题:in,typeof,instanceof,===运算符分别是干什

        本文链接:https://www.haomeiwen.com/subject/dvhfnxtx.html