• Js的那些事


    先说说  var array = new Array(10); 和 var array = Array.apply(null, {length:10});这两个有啥区别,乍一看两个都是生成长度是10的数组,但是仔细研究还是有区别的:

    1. var array = new Array(10); 

     直接在控制台看一目了然,上图:

    可以看到array里面是 (10)[empty*10],也就是说new Array(10);只是生成一个长度是10的空数组。

    2。var array = Array.apply(null, {length:10});

       再看这个控制台结果,继续上图:

       

    Array.apply(null, {length:10});同样生成长度是10的数组,但是每个元素已经赋了值是undefined,这就是两者做大的区别。在此可能会有人想到那为什么new Array(10);不会出错,当我们在JavaScript里面 var 一个变量时(例如:var i;),虽然我们并没有赋值给 i  ,但是JavaScript默认把 i 的值设为  undefined 了,所以我们可以直接输出 i 而不报错。

    接下来说一下类型转换的两个操作,+和-运算

    对于 “+” 如果左操作数或右操作数不是基本数据类型(primitive)时,会对其进行ToPrimitive转换,这样,左操作数和右操作数都是基本数据类型了,但是如果左右两边的数据类型不一致该怎么办呢?这就涉及到一个优先级的问题,低优先级的数据类型会主动转换为和高优先级一样的数据类型,然后再进行相加操作。它们的优先级关系为:string > num > boolean,所以就会存在两种相加操作:字符串拼接和数字相加。例如:

     "1" + 1;//"11"
     1 + true;// 2
     "1" + true// 相当于 “1”+“true”="1true"

     对于“-”操作就简单的多了,只是进行数值相减。 对于非数值类型的左右操作数都进行ToNumber,然后再进行数值相减运算。

    "1" - 1;//0
    "1" - true //0
    1 - "true" // 0

    this 关键词的使用
     //const o = {
            //    name: "大海",
            //    Say: function () { return "我叫" + this.name; } 
            //};
            //alert(o.Say());  //我叫大海
    
            //说明:绑定this是有由方法如何被调用所决定的而并不是函数定义所决定的,理解这点非常重要。也就是说这里的this绑定到o上
            //并不是因为Say是o的属性,而是因为Say直接由o调用,所以this才绑在了o上。那如果把同一个函数赋值给一个对象又会怎么?例如
            //const sp = o.Say;
            //alert(sp());    //我叫
            //由于调用函数的方式所以js并不知道原始函数是在o中定义的,所以this将会绑上undefined
    
    
            //const o = {
            //    name: '大海',
            //    greetBackwards: function () {
            //        function getReverseName() {
            //            let nameBackwards = '';
            //            nameBackwards = this.name;
            //            return nameBackwards;
            //        }
            //        return '我叫:'+getReverseName();
            //    },
            //};
            //alert(o.greetBackwards());  //我叫:  这里为什么不是“我叫:大海”?? 因为调o.greetBackwards()时里面又调了一个
            //getReverseName() 所以this绑在greetBackwards上了而不是o,为了解决这种问题常见的方式是把this赋值给一个变量暂存 例如
    
    
            const o = {
                name: '大海',
                greetBackwards: function () {
                    let self = this;  //暂存this
                    function getReverseName() {
                        let nameBackwards = '';
                        nameBackwards = self.name;  //这里的self绑定的就是o
                        return nameBackwards;
                    }
                    return '我叫:'+getReverseName();
                },
            };
            alert(o.greetBackwards());  //我叫:大海

     再看下面例子:

    const bruce = {
    name:'大海'
    };
    function Greet()
    {
    return "我叫" + this.name;
    }
    alert(Greet()) //我叫 alert(Greet.call(bruce));
    //我叫大海 这里对call不做过多解释,上篇文章已说过。可以看到call方法在调用函数时允许给this绑定一个对象


  • 相关阅读:
    typescript 装饰器
    typescript 中的模块
    深入理解typeScript中的泛型类
    泛型 泛型类
    vue跨域
    我喜欢的网站
    vuex
    路由导航守卫
    最多显示两行
    git命令
  • 原文地址:https://www.cnblogs.com/bin521/p/10442137.html
Copyright © 2020-2023  润新知