为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript深入浅出

Bosn 资深架构师
难度中级
时长 5小时28分
学习人数
综合评分9.60
492人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.5 逻辑清晰
  • 弱类型动态语言,不用太关心类。

    查看全部
  • return  a === null ? '[object Null]':Object.prototype.toString.apply(a); //hack ie678

    可以判断所有 所有 的数据类型 NBBBBBBBBBBBB


    true == 1;

    查看全部
    2 采集 收起 来源:编程练习

    2019-05-11

  • 函数属性和方法:

    func.name---函数名

    func.length--形参

    arguments.length--实参个数,实际传参个数!!!!

    arguments是类数组对象,其原型不是Array.prototype,可以通过数组的索引方法访问arguments对象

    形参没有传进来的话,就会和arguments失去绑定

    https://img1.sycdn.imooc.com//5cd59abf00016da004890552.jpg严格模式下:

    https://img1.sycdn.imooc.com//5cd59b810001d7db07200625.jpg

    apply和call方法(浏览器)

    https://img1.sycdn.imooc.com//5cd59bde0001059107580332.jpg严格模式下:

    https://img1.sycdn.imooc.com//5cd59c37000149f307740278.jpg

    bind方法:ES5出现的,IE9才支持

    https://img1.sycdn.imooc.com//5cd59cbb0001dcb905360512.jpg

    bind与curring(科里化):即把函数分成几个小部分

    function add(a,b,c)(return a+b+c;)

    var func = add.bind(undefined,100);//无需绑定undefined,100传给a

    func(1,2);1给b,2给c,、、、103

    var func2 = func.bind()undefined,200);//200给b

    func2(10);//310

    https://img1.sycdn.imooc.com//5cd59e5e000138ac09060332.jpgbind与new

    function foo(){

    this.b=100;

    return this.a;

    }

    var func = foo.bind({a:1});

    func();//1

    new func();//{b:100},可以理解为构造函数的那一套,即func是构造函数,new后返回值看函数的return,没有return或者return是个基本类型,new func()就返回一个空对象,这个对象的原型指向foo .prototype,

    所以会返回foo.prototype的属性值!


    bind方法在老浏览器中用不了,那在老浏览器中怎么实现这么一个方法呢?(bind方法实现两个功能:绑定this,科里化)

    https://img1.sycdn.imooc.com//5cd5a27700015d5011550606.jpg





    查看全部
  • 1.全局的this(浏览器)this即window


    2.一般函数的this(浏览器)

    function f1(){

    return this;

    }

    f1()===window;//true,在浏览器中为window,在node中为global object。

    但在严格模式下this会是undefined


    3.作为对象方法的函数的this

    var s = {a:2,

                 b:function(){return this.a;},//2

                 c:{a:7,b:function(){return this.a;}}//7

    }

    4.对象原型链上的this


    5.get/set方法与this,与3差不多

    6.构造器中的this:()看构造器有没有return,return的是啥,再决定this

    https://img1.sycdn.imooc.com//5cd7a666000142a313660768.jpg

    7.call/apply方法与this


    8.bind与this


    查看全部
    1 采集 收起 来源:[JavaScript]this

    2019-05-12

  • 函数声明和变量声明会前置,但函数表达式不会前置,表达式中声明的部分会前置。

    定义函数的三种方法:函数声明,函数表达式(函数自变量)2种,构造函数法

    函数表达式:

    https://img1.sycdn.imooc.com//5cd5844f0001b84304170609.jpg

    命名函数表达式(NFE):{

    var func = function nfe(){};

    alert(func===nfe);//'nfe' is undefined

    https://www.cnblogs.com/leaf930814/p/6825031.html

    nfe不能调用函数(只在作用域中起作用)

    func可以调用函数

    Function构造器(参数必须用双引号括起来,"a","b"..." function body")(不能访问闭包中的局部变量)(可用new,也可不用)

    https://img1.sycdn.imooc.com//5cd58a43000190c107120060.jpg


    查看全部
  • 函数的不同调用方法

    https://img1.sycdn.imooc.com//5cd4efe300019f2310430150.jpg

    当作为构造器的时候,new Foo(),若函数return一个基本类型,则返回一个this,若返回一个对象则是把这个返回对象作为构造器返回。

    https://img1.sycdn.imooc.com//5cd4f0ea00010d3f01890398.jpg

    查看全部
  • https://img1.sycdn.imooc.com//5cd4ebe00001123807450496.jpg数组小节:

    查看全部
  • 字符串和数组

    可把字符串看成一个伪数组

    字符串访问元素的方法可类似数组:str[n];

    字符串自己的方法:str.charAt(n);

    字符串也可用数组的Array.prototype上的方法

    但不能arr.method()这样直接用

    要Array.prototype,method.call(str);这样用

    https://img1.sycdn.imooc.com//5cd4ea8f0001105204420256.jpg

    查看全部
  • 数组VS一般对象

    Array.prototype的原型是Object.prototype

    https://img1.sycdn.imooc.com//5cd4e4260001dcdc03630221.jpg

    https://img1.sycdn.imooc.com//5cd4e4470001420605720221.jpg

    按索引访问数组常常比访问一般对象属性明显迅速,因为许多浏览器的js的引擎或者node的js引擎会对按索引访问数组进行优化

    一般对象不会有Array.prototype上的那些方法


    查看全部
  • 正则基础内容

    查看全部
  • Student.prototype.constructor = Student;

    查看全部
    1. Array.prototype.forEach是除了for,for..in之外的数组遍历的一个方法老的浏览器如IE6.7.8不支持

      forEach接受一个函数,这个函数在遍历到每个元素的时候调用,

      这个函数有三个参数,x:具体的元素的值,index:元素的索引,a:就是arr本身

      https://img1.sycdn.imooc.com//5cd3e0830001c53f05080116.jpghttps://img1.sycdn.imooc.com//5cd3e08e00014c9601170141.jpg

    2. Array.prototype.map法,不改变原数组

      数组映射

      https://img1.sycdn.imooc.com//5cd3e1f900017db802760181.jpg

    3. Array.prototype.filter不改变原数组

      数组过滤

      https://img1.sycdn.imooc.com//5cd3e2b000010c8e04940207.jpg

    4. Array.prototype.every&some

      数组判断

      https://img1.sycdn.imooc.com//5cd3e3b0000106a102890296.jpg

      https://img1.sycdn.imooc.com//5cd3e3bf0001043602950295.jpg

    5. Array.prototype.reduce&reduceRight

      对数组的元素两两操作

      arr.reduce(function(x,y){},z);//z可选,若有z,则x的初始值为z,y的初始值为arr[0],函数返回值作为x的下一个值,arr[1]为y的下一个值,以此类推

      若没z,则x的初始值为arr[0],y的初始值为arr[1],函数返回值作为x的下一个值,arr[2]为y的下一个值,以此类推

      reduceRight与reduce顺序相反

      https://img1.sycdn.imooc.com//5cd43aad0001429105010539.jpg

    6. Array.prototype.indexOf&lastIndexOf数组检索

      index(ele,startindex);

      ele:要查找的元素,startindex查找的起始位置索引,可省略,(从startindex位置开始向后面找)

      lastIndexOf与indexOf是相反的顺序,从后往前找

      https://img1.sycdn.imooc.com//5cd3e56700019d0c03530358.jpg

    7. Array.isArray(ES5)

      isArray是Array构造器上的属性,不是Array.prototype的,所以不能直接使用,要Array.isArray(要判断的对象);

      Array.isArray([]);//true

      不能直接isArray([])!!!!

      判断是否为数组还可以用以下方法:

      [] instanceof Array;//true

      Object.prototype.toString.apply([])==='[object Array]';//true

      [].constructor===Array;//true,当对象的构造器是从Array继承而来时,此法失效。


    查看全部
  • 数组方法:

    1.Array.prototype.join

    function repeatStrng(str,n){

    return new Array(n+1).join(str);

    }

    repeatString(a,3);//aaa重复三次

    2.Array.prototype.reverse

     var arr = [1,2,3];

    arr.reverse();//返回[3,2,1]

    arr;//[3,2,1]原数组被修改

    3.Array.prototype.sort排序

    https://img1.sycdn.imooc.com//5cd3d79c0001de4d03090065.jpg

    若数组元素是数字,则会把其转换为字符串排序

    https://img1.sycdn.imooc.com//5cd3d7db00017dbc02810087.jpg//元素组被修改

    若想让数组按照从小到大或从大到小的顺序,则给sort 方法传入一个函数

    如:arr.sort(function(a,b){return a-b});//[3,13,24,51]升序

    若是 return b-a;则结果为降序

    https://img1.sycdn.imooc.com//5cd3d9760001b8f803960312.jpg

    4.Array.prototype.concat合并素组

    var arr=[1,2,3];

    arr.concat(4,5);//[1,2,3,4,5]

    arr;//[1,2,3]不改变原数组

    arr.concat([10,11],13);//[1,2,3,,10,11,13]数组被拉平

    arr.concat([1,[2,3]]);//[1,2,3,1,[2,3]]

    5.Array.prototype.slice从数组返回选定的元素片段,不修改原数组

    var arr = [1,2,3,4,5];

    arr.slice(1,3);//[2,3]

    slice(start,end)//start为片段的头部索引,end为尾部索引,返回片段不包括end对应的元素,start与end可为负数,end可省略(arr.length)

    arr.slice(1);//[2,3,4,5]

    arr.slice(1,-1);//[2,3,4]

    arr.slice(-4,-3);//[2]

    6.array.prototype.splice删除元素,并向数组添加新元素

    splice(startindex,num,ele,ele...);

    startindex:要删除的起始位置,可为负数,num可省略,为从起始位置开始要删除的元素个数,ele为要添加的元素,插到删除的元素位置那。

    https://img1.sycdn.imooc.com//5cd3de090001122004690410.jpg


    查看全部
  • 二维数组:arr.llength,row.length

    稀疏数组:并不含有从0开始的连续的索引,一般length属性值比实际元素个数大。注意索引的存在

    https://img1.sycdn.imooc.com//5cd3c91e0001f65606530302.jpg

    查看全部
  • 数组迭代:for(var i=0;i<n;i++)

                    for(i in arr)//输出无顺序,原型链上的属性也可能会出现

                     而且如果arr.x=0;这个也会出现,虽然x不是数值索引。

    https://img1.sycdn.imooc.com//5cd3c0d90001c03a09990601.jpg

    查看全部

举报

0/150
提交
取消
课程须知
1.您至少学习了本站“JS入门”、“JS进阶”两门基础课程。 2.如您具备一定实践经验对学习有很大帮助。 3.如您没有脚本编程开发经验,学习过程有可能会受挫部分内容或示例代码,请“暂时略过不懂的部分,后面章节会阐述”,当然想透彻学习,还需大量实践来体会知识的内涵。
老师告诉你能学到什么?
结合实例,深入解析以下知识内容: 1. 数据类型、表达式和运算符、语句; 2. 对象、数组、变量、函数; 3. this、闭包和作用域; 4. OOP; 5. 正则与模式匹配。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!